2011-06-14 81 views
2

我將VSTO應用程序轉換爲與ExcelDNA兼容的應用程序。 Howeve 主要問題是與VSTO相比,ExcelDNA沒有控件對象。C#彙編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使用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中的等價物?

回答

0

事實上,您的Excel-DNA插件只能訪問Excel COM對象模型,而不能訪問VSTO擴展。但是,VSTO程序集只是通過COM接口與Excel交流,所以理論上你應該可以在Excel-DNA插件中做同樣的事情,也許在添加一些輔助類之後。

我建議你可以試着弄清楚如何從VBA中創建列表對象,也許是通過記錄和檢查一些做你想做的事情的宏。如果您能夠以您想要的方式從VBA中操作Excel,您當然可以從Excel-DNA插件中執行相同的操作。

一個可能的問題是我相信某些對象模型只能通過COM調度接口公開。這些方法不會通過互操作程序集可見,並且可能必須通過VB.NET中的反射或C#4中的「動態」支持進行調用。一旦您能夠從VBA進行正確的調用,我很高興以幫助弄清楚如何從您的Excel-DNA加載項中執行此操作。