2010-04-30 21 views
3

我目前正在嘗試將一些VB6宏移入C#應用程序,並且在使用C#設置活動單元格時遇到問題。來自C#的Excel操作 - 設置ActiveCell?

在VB6其簡單:

ActiveSheet.Range("L1").Select 

有誰知道C#相當於是什麼?

提前歡呼。

+0

我假設你要去COM路線?如果你製作的是Excel 2007或更高版本的文檔,你應該使用openXML路由(需要.NET 3.0/3.5,儘管你可以在'System.Xml'中使用zip-lib和vanilla XML操作自己完成更多的工作。 – Aren 2010-04-30 15:24:15

回答

5

下面是一個示例代碼段:

 Excel.Worksheet sht = (Excel.Worksheet)ActiveSheet; 
     sht.Cells[3, 3] = "HELLO"; 

您也可以捕捉範圍:

 Excel.Range rng = (Excel.Range)sht.Cells[3, 3]; 

我相信你像以前一樣選擇範圍的選擇方法,雖然我還沒有」沒有測試過這個。

 rng.Select(); 

顯然,您可以簡化這一點,並將這些語句鏈接在一起,並進行正確的投射。我不想冒這個猜測,因爲我沒有從我這裏打開VSTO項目。

編輯

你也應該能夠使用get_Range擺脫紙張的範圍:

 rng = sht.get_Range("A1", Type.Missing); 

VSTO趨於恢復對象的大部分時間,因此需要強制轉換,但get_Range是例外。有人可能會糾正我,因爲我不是VSTO的大用戶(當涉及到Excel時,仍然VBA很難)。

+0

Im so密集的虛幻,我正在嘗試到rng.Select之前實際分配rng一個單元格!感謝使它顯而易見! – JoeBeez 2010-04-30 15:49:08

+1

小修正:get_Range需要2個參數(如果您想選擇一組單元格),和它是其中一個很好的情況下,它實際返回正確的對象類型(Excel.Range),而不是一個需要鑄造的對象... var cell = sheet.get_Range(「A1」,Type.Missing); – Mathias 2010-04-30 18:01:21

+0

@Mathias,謝謝 - 更正了,我想我錯誤地記錄了一個輸入的情況 - 第二個輸入失敗。 – 2010-04-30 18:34:34