2011-01-25 59 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