2011-01-25 91 views
1

...C#自動化到Excel

Excel.Application oXL; 
Excel._Workbook oWB; 
Excel._Worksheet oSheet; 

oXL = new Excel.Application(); 
oWB = (Excel._Workbook)oXL.ActiveWorkbook; 
oSheet = (Excel._Worksheet)oWB.Sheets[1]; 

oSheet.Cells[5,10] = "Value"; 

...

在碰撞產生這樣的:

Unhandled Exception: System.NullReferenceException: Object reference not set to 
an instance of an object. 
    at ConsoleApplication1.Program.Main(String[] args) in C:\Wherever\Visual Studio 2008\Projects\ConsoleApplication20\ConsoleApplication20\Program. 
cs:line 60 

在這種情況下,第60行是

oSheet = (Excel._Worksheet)oWB.Sheets[1];

,如果行寫

oSheet = (Excel._Worksheet)oWB.ActiveSheet;同樣的事情發生。

當時Excel已經在屏幕上打開,並且新的工作表已經就位。

+0

可能不是你要找的答案玩,但我發現C#的辦公室互操作支持,極不理想很多。另一方面,我發現VB.NET在Excel自動化方面更穩定。只是一些我從事的項目的個人觀察。 – Nasir

+0

呃,我剛剛在C#中完成了這個。感謝您對VB.NET的建議 – user225626

+0

@ nsr81 C#或VB沒有任何問題。它全部被編譯成MSIL。繼續話題? – RichardTheKiwi

回答

2

錯誤告訴你oWB爲空。它是空的,因爲不像從GUI中打開Excel,自動化不會創建一個新的3張書。您需要先專門加載一本書,或者添加一本書。

見例如這裏http://support.microsoft.com/kb/302084它明確地增加了一個新的工作簿

//Get a new workbook. 
    oWB = (Excel._Workbook)(oXL.Workbooks.Add(Missing.Value)); 
+0

好的,那有效。謝謝。我現在的問題是什麼是Missing.Value所有關於?另外,你是說在歷史獲取/設置範例中,C#Office Interop仍然可以執行任何操作,如果是,哪一個是.Workbooks.Add(Missing.Value)? Get〜或Set〜? – user225626

+0

Missing.Value用於InterOp,當期望值(或可選)時,但您沒有任何值。 – RichardTheKiwi

+0

'哪一個是.Workbooks.Add(Missing.Value)'我不認爲它也是。 'Add'只是一個函數調用,而不是一個Accessor。 – RichardTheKiwi