C#汇编ExcelDNA

我将VSTO应用程序转换为与ExcelDNA兼容的应用程序。 但是,最主要的问题是,与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; 

但是,当我试图在ExcelDNA中使用Micorsoft.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中的等价物?

事实上,从您的Excel-DNA插件中,您只能访问Excel COM对象模型,而不能访问VSTO扩展。 但是,VSTO程序集只是通过COM接口与Excel交stream,所以理论上你应该可以在Excel-DNA插件中做同样的事情,也许在添加一些辅助类之后。

我build议你可以试着弄清楚如何从VBA创build列表对象,也许是通过logging和检查一些你想做的macros。 如果你能够以你想要的方式从VBA中操作Excel,你当然可以从你的Excel-DNA插件中做同样的事情。

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