C # Автоматизация в Excel - PullRequest
       28

C # Автоматизация в Excel

1 голос
/ 25 января 2011

...

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уже открыт на экране в то время, с новым рабочим листом на месте.

1 Ответ

2 голосов
/ 25 января 2011

Ошибка говорит вам, что oWB - ноль. Это ноль, потому что в отличие от открытия Excel из графического интерфейса, автоматизация не создает новую книгу на 3 листа. Сначала вам нужно специально загрузить книгу или добавить ее.

См. Пример здесь http://support.microsoft.com/kb/302084, где он явно добавляет новую книгу для игры с

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