Excel 互操作:对列进行分组
Excel Interop: Grouping columns
如何使用
Excel 互操作对列进行分组?
如果我录制一个宏(通常是入门的好方法),我会得到以下代码:
Columns("I:M").Select
Selection.Columns.Group
不幸的是,由于几个问题,这不起作用,至少在C++中是这样。首先,Application.Selection
返回一个正常的Range
,然后Range.Columns
是另一个Range
。这种方法Range.Group
:
http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.range.group%28v=office.11%29.aspx
此方法仅适用于数据透视表。
那么如何使用 Excel 互操作创建列组呢?
即使我设法创建了一个组,我该如何缩小/扩展它?我的意思是单击 + 以显示组的内容,或者相反,"单击"减号以隐藏组。如果我在录制宏时这样做,它根本不会反映在宏中。
尽管Range.Group()
文档似乎与数据透视表有关,但如果使用 Range.Columns
提取列,然后将 .Group()
方法应用于该范围,它将具有预期的效果。 在 C# 中:
Range range = sheet.get_Range("c1","e1");
range.Columns.Group();
编辑:完整的示例,再次在 C# 中(抱歉,这是我手边的示例):
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
app.Visible = true;
app.Workbooks.Add();
Worksheet sheet = app.Workbooks[1].Sheets[1];
Range range = sheet.get_Range("c1","e1");
range.Columns.Group();
宏录制器掩盖的一件事是需要使用 Range.EntireColumn 属性。 下面是一些分组、展开和折叠的代码。 我通过谷歌搜索和鬼混得到了这个,但我认为它得到了正确的概念。 希望它很容易翻译成C++:
Sub test()
Dim ws As Excel.Worksheet
Set ws = ActiveSheet
With ws
If .Columns.OutlineLevel > 1 Then
'clear any existing hidden grouped columns and grouping
.Outline.ShowLevels columnlevels:=.Columns.OutlineLevel
.Range("1:1").EntireColumn.Ungroup
End If
'group
.Range("A:C").EntireColumn.Group
'collapse
ws.Outline.ShowLevels columnlevels:=1
'expand
ws.Outline.ShowLevels columnlevels:=.Columns.OutlineLevel
End With
End Sub
相关文章:
- 如何读取 C++ SAFEARRAY**,该 SAFEARRAY** 是 COM 互操作的结果,其中 C# 返回值为
- 编译为 wasm 的 C++ 和 Rust 程序可以以某种方式互操作吗?
- 有什么语言可以与C++互操作吗
- 使 Flutter C/C++ 互操作示例正常工作
- C++互操作(隐式 PInvoke)的限制
- COM 互操作结构定义与内存布局不匹配
- _Complex 和 std::complex 之间的 C/C++ 互操作
- C# COM 服务器互操作 - System.InvalidCastException.
- 从C++与 C 灵活阵列成员互操作的正确方法是什么?
- 如何通过 COM 互操作访问复杂对象的属性?
- 如何区分"QObject"的亲子关系关注点,例如与其他所有者进行互操作?
- DirectWrite GDI 互操作:使用"IDWriteFontFace"绘制文本的简单方法
- opencl openGL互操作内核参数用于读取 写入
- Rust 互操作与 C++ std::string
- 将互操作 HwndSource 包装在 c++/cli 中,以用于本机 c++/MFC 应用程序
- 跨 C# 和 COM 互操作使用对象C++
- 尝试为c++互操作自动生成库时出错
- 在MS Visual Studio 2010上使用带有Cuda互操作的OpenGL缓冲区时出现异常错误
- 如何在 C++ 上使用互操作创建 Excel 文件
- Excel 互操作:对列进行分组