ExcelDNA – 创build一个表:xlcAddListItem或其他方式
我想弄清楚如何使用ExcelDNA
从ExcelReference
范围创build表。
使用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";
我一直在尝试使用ExcelDNA
来xlcAddListItem
与ExcelDNA
类似的东西,但是如果没有任何适当的文档,这很粗糙。 有没有人有成功? 基本上采取ExcelDNA
数组调整器的例子,然后把网格输出,把它变成一个表。
到目前为止我尝试过
ExcelDna.Integration.SourceItem mySourceItemHopefully = (ExcelDna.Integration.SourceItem)XlCall.Excel(XlCall.xlcAddListItem, 1, myExcelReference); mySourceItemHopefully.Name = "uniquesomething";
但是我得到一个访问冲突错误。
为此,您必须使用COM对象模型,只要您符合以下条件,就可以从Excel-DNA加载项中安全地使用该模型:
-
使用
ExcelDnaUtil.Application
来获取根Application
对象,和 -
在macros或COMcallback上下文中从主线程进行所有COM对象模型调用。
您可能需要从ExcelReference
获取COM Range对象。
这可以像下面这样简单:
static Range ReferenceToRange(ExcelReference xlref) { string refText = (string)XlCall.Excel(XlCall.xlfReftext, xlref, true); dynamic app = ExcelDnaUtil.Application; return app.Range[refText]; }
(这里的“dynamic”应用程序也可以键入为Microsoft.Office.Interop.Excel.Application
,如果你有一个PIA组件的参考。)
对于具有多个矩形的更复杂的ExcelReferences,您可以从这里的VB.NET代码开始: https : //github.com/Excel-DNA/Registration/blob/882517eed2137d2b2f9b4b794803258d20e5a174/Source/ExcelDna.Registration.VisualBasic/RangeParameterConversion.vb
C API不支持添加表格。 微软还没有扩展xlcXXX
macros来覆盖最新版本的Excel(自Excel 2000以来)的新function。 (但是,在Excel 2013之前, xlfXXX
函数的列表一直保持最新。)
您列出的两个macros函数不涉及您正在创build的表的types – 您可以在MacroHelp帮助文件中看到此处,您可以在这里find它: http ://www.xceed.be/Blog.nsf/dx/excel -macrofunction的帮助文件换窗户-7
ADD.LIST.ITEM( xlcAddListItem
): “在工作表或对话框控件上的列表框或下拉控件中添加一个项目。
TABLE( xlcTable
): “等同于从数据菜单中select表格命令,根据您在工作表上定义的input值和公式,创build一个表格,使用数据表格通过改变某些常数值来执行”假设“分析在工作簿中查看其他单元格中的值是如何受到影响的。“ 所以这是关于数据表,它与你正在创build的'ListObject'表不同。