ExcelDNA-创建表:xlcAddListItem或其他方式

本文关键字:其他 方式 xlcAddListItem 创建 ExcelDNA- | 更新日期: 2023-09-27 17:59:21

我正试图弄清楚如何使用ExcelDNAExcelReference范围创建表。

使用Excel,您通常会执行以下操作:

range2.Worksheet.ListObjects.Add(Microsoft.Office.Interop.Excel.XlListObjectSourceType.xlSrcRange, range2, System.Type.Missing, Microsoft.Office.Interop.Excel.XlYesNoGuess.xlYes, System.Type.Missing).Name = "uniquesomething";

我一直在尝试使用xlcAddListItemExcelDNA进行类似的操作,但在没有任何适当的文档的情况下,操作相当粗糙。有人成功了吗?基本上以ExcelDNA数组大小调整器为例,然后获取网格输出并将其转换为表。

到目前为止,我尝试了

ExcelDna.Integration.SourceItem mySourceItemHopefully = (ExcelDna.Integration.SourceItem)XlCall.Excel(XlCall.xlcAddListItem, 1, myExcelReference);
mySourceItemHopefully.Name = "uniquesomething";

但我收到了一个访问违规错误。

ExcelDNA-创建表:xlcAddListItem或其他方式

为此,您必须使用COM对象模型,只要您:

  1. 使用ExcelDnaUtil.Application获取根Application对象,以及

  2. 从宏或COM回调上下文中的主线程进行所有COM对象模型调用。

您可能需要从ExcelReference获取COM范围对象。

这可以简单到:

static Range ReferenceToRange(ExcelReference xlref)
{
    string refText = (string)XlCall.Excel(XlCall.xlfReftext, xlref, true);
    dynamic app = ExcelDnaUtil.Application;
    return app.Range[refText];
} 

(如果您有对PIA程序集的引用,这里的"动态"应用程序也可以被键入为Microsoft.Office.Interop.Excel.Application。)

对于具有多个矩形的更复杂的ExcelReferences,您可以从这里开始使用VB.NET代码:https://github.com/Excel-DNA/Registration/blob/882517eed2137d2b2f9b4b794803258d20e5a174/Source/ExcelDna.Registration.VisualBasic/RangeParameterConversion.vb


C API不支持添加表。Microsoft尚未扩展xlcXXX宏以涵盖最新版本Excel中的更新功能(自Excel2000以来)。(但是,xlfXXX函数列表一直保持最新状态,直到Excel 2013。)

您列出的两个宏函数没有引用您正在制作的表的类型-您可以在此处的MacroHelp帮助文件中看到这一点:http://www.xceed.be/Blog.nsf/dx/excel-macro-function-help-file-for-windows-7

ADD.LIST.ITEM(xlcAddListItem):"在工作表或对话框工作表控件的列表框或下拉控件中添加项目。"

TABLE(xlcTable):"相当于从"数据"菜单中选择"表格"命令。根据工作表上定义的输入值和公式创建表格。使用数据表通过更改工作簿中的某些常数值来执行"假设"分析,以查看其他单元格中的值如何受到影响。",与您试图创建的"ListObject"表不同。