使用ExcelDNA的C#程序集

本文关键字:程序集 ExcelDNA 使用 | 更新日期: 2023-09-27 17:59:19

我正在将VSTO应用程序转换为与ExcelDNA兼容的应用程序。豪威r主要问题是ExcelDNA与VSTO相比没有控制对象。

在VSTO:Microsoft.Office.Tools.Excel:中,可以添加列表对象

Worksheet worksheet = Globals.Factory.GetVstoObject(
    Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]);
listObj = worksheet.Controls.AddListObject(cell, "list1");

随后,您可以设置数据源

listObj.DataSource=list;

然而,当我尝试在ExcelDNA中使用Micosoft.Office.Interop.Excel使用listObject时。我无法获得所需的结果,listObject返回了空白数据。

ws=excelApp.ActiveWorkBook.ActiveSheet;
Excel.Range rng=ws.cells[1,1];
//set the datasource
rng.Value2=list;
listObj=this.ListObjects.Add(
    Excel.XlListObjectSourceType.xlSrcRange, rng,Missing.Value,
    Microsoft.Office.Interop.Excel.XlYesNoGuess.xlNo, Missing.Value);

我不能使用Globals.Factory…,因为这不是VSTO程序。因此,我想出了以下解决方法。我做错了什么吗?我怀疑是数据源造成了ExcelDNA中的问题。

我该怎么办才能解决这个问题?我应该如何将VSTO程序转换为ExcelDNA中的等效程序?

使用ExcelDNA的C#程序集

实际上,从Excel DNA加载项中,您只能访问Excel COM对象模型,而不能访问VSTO扩展。然而,VSTO程序集只是通过COM接口与Excel进行通信,因此理论上,您应该能够从Excel DNA外接程序中进行同样的操作,也许是在添加一些辅助类之后。

我建议你可以试着从VBA中创建列表对象,也许可以通过录制和检查一些可以执行你想要的操作的宏。如果你能够从VBA中以你想要的方式操作Excel,你当然可以从Excel DNA加载项中执行同样的操作。

一个可能的问题是,我认为某些对象模型仅通过COM调度接口公开。这样的方法在互操作程序集中是不可见的,可能必须通过反射、VB.NET或C#4中的"动态"支持来调用。一旦你能够从VBA中进行正确的调用,我很乐意帮助你从Excel DNA加载项中找出如何做到这一点。