我有一些現有的自定義Excel工作簿/應用程序與代碼隱藏的C#,它工作正常。他們做的事情就像引用在活動工作表中定義的表格,將他們的數據源設置爲IEnumerables等。如何獲得不是活動的標籤/工作表中的表的引用
但是,現在我需要引用一個不在活動工作表中的表。基本上,活動工作表有一個觸發一些C#代碼隱藏的按鈕,我需要弄清楚如何在工作簿的第四個選項卡/工作表中獲取對錶的引用,同時在第一個選項卡/工作表(活動的)。
在我現有的代碼(工作),我可以的工作表上做到這一點:
this.Table1.DataSource = results;
this.Table1.RefreshDataRows();
...這樣的「表1」的參考是那裏,我可以很容易地訪問它。
但是,試圖獲得對其他表中的表的引用,我遇到了ComObject錯誤。例如,我希望這(或類似的東西)會工作:
((Sheet4)Application.Worksheets[3]).Table2.DataSource = results;
((Sheet4)Application.Worksheets[3]).Table2.RefreshDataRows();
...但拋出的錯誤:「無法將類型‘系統.__ ComObject’到ContractStatementClient.Sheet4' 」。編寫這些行允許Visual Studio使用IntelliSense查找表(表2),但在執行時,它會因我提到的ComObject錯誤而失敗。 「Sheet4」是Visual Studio在創建新選項卡時爲我創建的類的名稱。
我可以得到的似乎做工作到工作表的引用:
Application.ActiveWorkbook.Worksheets[3]
...但我似乎無法弄清楚如何獲得從有到有一個句柄表(或ListObject),我可以設置DataSource屬性,就像我以前所做的那樣。
我嘗試這樣做,但它投中拋出了「NOINTERFACE」 COM錯誤:
Worksheet worksheet = Application.ActiveWorkbook.Worksheets[3];
((Microsoft.Office.Tools.Excel.ListObject) (worksheet.ListObjects[1])).DataSource = results;
我失去了一些東西明顯?我幾乎不瞭解COM,因此我很難診斷髮生了什麼事情。最後,我只需要弄清楚如何在其他選項卡/工作表中設置Table/ListObject的數據源(大概告訴它自己刷新)。
謝謝!任何幫助是極大的讚賞。
'Application.ActiveWorkbook.Worksheets [3] .Table2.DataSource'不工作嗎? – Aprillion 2012-03-23 20:40:32
爲了讓Visual Studio與此一起工作,我必須執行如下操作:'((Sheet4)Application.ActiveWorkbook.Worksheets [3])。Table2.DataSource = results;',但是在運行時拋出'Can not將類型'System .__ ComObject'轉換爲'ContractStatementClient.Sheet4'。 – Egahn 2012-03-23 20:56:27
我應該說在這一點上,我已經通過在工作簿級別爲我的所有工作表創建一個靜態容器,並且在工作表啓動時將工作表添加到該容器中來解決此問題。所以我可以通過我的容器直接訪問每個工作表,並繞過所有的COM業務(我不贊同)。我仍然很好奇,如果有人有更直接的答案來獲得這些對象! – Egahn 2012-03-23 20:58:08