2

我正在将 VSTO 应用程序转换为与 ExcelDNA 兼容的应用程序。然而,主要问题是 ExcelDNA 与 VSTO 相比没有控件对象。

在 VSTO 中:Microsoft.Office.Tools.Excel:可以添加 listObject

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 中的等效程序?

4

1 回答 1

1

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

我建议您可以尝试弄清楚如何从 VBA 创建列表对象,也许可以通过记录和检查一些执行您想要的宏的方法。如果您能够从 VBA 以您想要的方式操作 Excel,您当然可以从您的 Excel-DNA 加载项中执行相同的操作。

一个可能的问题是,我相信某些对象模型仅通过 COM 调度接口公开。此类方法不会通过互操作程序集可见,并且可能必须通过反射、从 VB.NET 或 C# 4 中的“动态”支持调用。一旦您能够从 VBA 进行正确调用,我很高兴帮助弄清楚如何从您的 Excel-DNA 加载项中执行此操作。

于 2011-06-14T21:06:43.880 回答