2016-07-30 140 views
0

我想弄清楚如何使用ExcelDNAExcelReference范围创建表格。ExcelDNA - 创建表格:xlcAddListItem或其他方式

使用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"; 

但我得到一个访问冲突错误。

回答

1

为此,您必须使用COM对象模型,您可以从Excel-DNA内安全地使用外接只要你:

  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]; 
} 

(这里的“动态”应用程序也可能被类型化为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宏以覆盖最新版本的Excel中的新功能(自Excel 2000以来)。 (但是,xlfXXX函数的列表一直保持到Excel 2013的最新状态。)

您列出的两个宏函数不引用您正在创建的表的类型 - 您可以在MacroHelp中看到此内容帮助文件,你可以在这里找到:http://www.xceed.be/Blog.nsf/dx/excel-macro-function-help-file-for-windows-7

ADD.LIST.ITEM(xlcAddListItem):“列表框中添加一个项目或下拉控制在工作表或对话框工作表的控制。”

表(xlcTable):“等价于从数据菜单选择表命令创建基于你在工作表上定义的输入值和公式表使用的数据表来执行。”乜如果“通过改变工作簿中的某些常数值来分析,以查看其他单元格中的值是如何受到影响的。“所以这是关于数据表,它与您尝试创建的'ListObject'表不同。