使用ExcelDNA进行C#装配

时间:2011-06-14 16:11:56

标签: c# excel excel-2007 excel-dna

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

在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;

但是,当我尝试使用listObject使用Micosoft.Office.Interop.Excel在ExcelDNA中执行此操作时。我无法获得所需的结果,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中的等效程序?

1 个答案:

答案 0 :(得分:0)

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

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

一个可能的问题是我相信某些对象模型只能通过COM调度接口公开。这些方法通过互操作程序集不可见,可能需要通过反射,VB.NET或C#4中的“动态”支持调用。一旦你能够从VBA拨打正确的电话,我很高兴帮助您了解如何从Excel-DNA插件中进行操作。

相关问题