2012-09-05 76 views
3

並將結果繪製在Excel中的二維單元格中? 我使用C#,.NET,Excel的DNA,附加快遞RTD,如何創建一個返回二維數組的UDF

感謝

編輯 我試過http://excel-dna.net/2011/01/30/resizing-excel-udf-result-arrays/,不適合我的工作。 我想要這樣 MyUDF(param1,param2)根據param1,param2的長度返回一個2-D數組,例如param1是「a,b,c」,param2是「high,low」返回一個數組[3,2],並顯示結果在3行2列

我也試過Excel ExcelDNA C#/Try to copy Bloomberg BDH() behavior (writing Array after a web request),它工作正常。 但我的要求是後臺工程師會調用RTD功能,RTD功能是一個多步驟的過程,首先它會登錄(異步,然後訂閱(異步),當我從背景工作者調用xlcall.RTD時,它會給出訪問違規例外

+0

你嘗試過什麼,並沒有運行什麼問題到?什麼是「二維細胞」? http://blogs.msdn.com/b/gabhan_berry/archive/2008/04/07/writing-custom-excel-worksheet-functions-in-c_2d00_sharp.aspx –

+0

我試過http://excel-dna.net/2011/01/30/resizing-excel-udf-result-arrays /,它會返回#Value!,而不是爲我工作。主席先生,請參閱編輯 – toosensitive

回答

1

Excel UDF和RTD是被動的東西,當用戶輸入一個公式時,Excel會調用UDF(RTD函數)來計算公式並將結果返回給調用單元。與RTD不同,UDF可以找出它們被調用的地方,但是它們都不能「擴展」調用範圍,擴展範圍也會修改其他單元格中的公式/值 - 這不是UDF允許的事情; RTD服務器沒有可以訪問Excel對象模型。

考慮在同一個程序集中組合一個COM加載項和RTD服務器。 COM加載項可以處理SheetChange事件以確定用戶是否輸入引用您的RTD的公式。發生這種情況時,COM加載項可以用公式或數據填充任何所需的單元格區域,並設置一些標誌或存儲RTD可訪問的數據。此外,RTD可以調用加載項中定義的公共方法,並且可以用這種方式填充任何單元格。如果你選擇這個選項,你無疑會在RefreshData事件中調用這樣一個方法。但請注意,此時Excel可能無法準備用於修改單元的COM調用。爲避免潛在的問題,我建議在延遲後修改單元格,請參閱ADXAddinModule.SendMessage()方法和ADXAddinModule.OnSendMessage事件。重點在於OnSendMessage事件僅在Excel完成其任務並準備好請求時纔會發生。

您認爲如何?來自白俄羅斯(GMT + 3)

問候,

安德烈·斯莫林 外接快遞組長

+0

謝謝。你有什麼樣的例子嗎? Excel準備就緒後,如何確保發生OnSendMessage事件? – toosensitive

+0

謝謝,先生。我想在RefreshEvent中調用一個公共方法。我會記住字典中每個函數的調用者,在refreshevent中,我將查找它的調用者,然後在excel中繪圖。我沒有得到sheetChange事件部分。謝謝 – toosensitive

+0

請參閱HowTo:在一個程序集中創建COM加載項,XLL UDF和RTD服務器 - http://www.add-in-express.com/creating-addins-blog/2010/03/24/addin-xll -rtd酮組裝/。 –