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

时间:2016-07-30 09:13:47

标签: c# excel excel-dna

我正在尝试弄清楚如何使用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";

我一直在尝试使用ExcelDNAxlcAddListItem做类似的事情,但如果没有任何适当的文档,它会非常粗糙。有人有成功吗?基本上采用ExcelDNA数组调整器示例,然后获取网格输出并将其转换为表格。

到目前为止,我试过

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

但是我收到了访问冲突错误。

1 个答案:

答案 0 :(得分:1)

为此,您必须使用COM对象模型,只要您能够在Excel-DNA加载项中安全地使用它:

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

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

  3. 您可能需要从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];
    } 
    

    (如果你有对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中的新功能(自Excel 2000起)。 (但是,在{2013}之前,xlfXXX函数列表一直保持最新状态。)

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

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

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