ExcelDNA-创建表:xlcAddListItem或其他方式
本文关键字:其他 方式 xlcAddListItem 创建 ExcelDNA- | 更新日期: 2023-09-27 17:59:21
我正试图弄清楚如何使用ExcelDNA
从ExcelReference
范围创建表。
使用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";
我一直在尝试使用xlcAddListItem
对ExcelDNA
进行类似的操作,但在没有任何适当的文档的情况下,操作相当粗糙。有人成功了吗?基本上以ExcelDNA
数组大小调整器为例,然后获取网格输出并将其转换为表。
到目前为止,我尝试了
ExcelDna.Integration.SourceItem mySourceItemHopefully = (ExcelDna.Integration.SourceItem)XlCall.Excel(XlCall.xlcAddListItem, 1, myExcelReference);
mySourceItemHopefully.Name = "uniquesomething";
但我收到了一个访问违规错误。
为此,您必须使用COM对象模型,只要您:
-
使用
ExcelDnaUtil.Application
获取根Application
对象,以及 -
从宏或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"表不同。