Excel-DNA:通过 Excel-DNA 的 C API 特征对行进行分组

Excel-DNA: grouping rows via C API feature of Excel-DNA

我熟悉如何在 Excel VSTO/COM 互操作中对范围进行分组:

ws.EnableOutlining = true;
ws.Outline.SummaryRow = XlSummaryRow.xlSummaryAbove;
var rng = GetRangeSomeHow();
rng.EntireRow.Group();
rng.EntireRow.OutlineLevel = someLevel;

在 Excel-DNA 中最有效的方法是什么?我想一定有一种 C-API 的方式来做到这一点,以某种方式巧妙地封装在 Excel-DNA 中,但对于我来说,我无法通过在线文档(包括.Google).

有很多帖子使用与我上面的示例类似的代码,但这些调用非常昂贵,尤其是因为我总共需要执行此操作约 5000 次(我有一个非常大的数据集)。

编辑: 所以似乎有这个方法调用:

XlCall.Excel(XlCall.xlfGroup...)

唯一的问题是,我不知道参数是什么。好像应该传入一个ExcelReference,但是.EntireRow是怎么解析的呢? C API 会为我处理它吗 - 在这种情况下我只需要传递一个 new ExcelReference(1,100,1,1) 并完成它......或者还有更多吗?

提前感谢任何能回答我问题的人!

我认为 C API GROUP 函数不是您要找的函数。文档说:

GROUP

Creates a single object from several selected objects and returns the object identifier of the group (for example, "Group 5"). Use GROUP to combine a number of objects so that you can move or resize them together.

If no object is selected, only one object is selected, or a group is already selected, GROUP returns the #VALUE! error value and interrupts the macro.

我建议您对此类事物使用 COM 对象模型,即使在 Excel-DNA 加载项中也是如此。多年来,C API 并没有真正针对像这种情况下的一般 sheet 操作进行更新,因此您可能 运行 某些功能无法正常工作或相对于 COM 对象模型不完整。

在您的 Excel-DNA 加载项中,只需确保通过调用 ExcelDnaUtil.Application.

获取正确的应用程序根对象

为了提高这种 sheet 编辑的性能,您几乎必须使用与 VBA 或 VSTO 相同的技巧 - 禁用屏幕更新和计算等。