Попытка открыть вторую книгу возвращает ноль - PullRequest
0 голосов
/ 20 мая 2019

Я не могу открыть вторую книгу с помощью взаимодействия Excel и не могу понять, почему.Я посмотрел на несколько учебных пособий / справочных потоков / и т.д.включая этот SO ответ и похоже, что моя логика должна работать.Вот процедура тестирования, которая просто пытается открыть две рабочие книги, получить доступ к листам в каждой рабочей книге, а затем закрыть рабочие книги и выйти из Excel:

using System;
using System.IO;
using System.Linq;
using Excel = Microsoft.Office.Interop.Excel;


    private static void TestOpen(string fromWorkbook, string toWorkbook, string fromSheet, string toSheet){
      Excel.Application excelApplication = new Excel.Application();
      Excel.Workbook srcworkBook = excelApplication.Workbooks.Open(fromWorkbook);
      Excel.Workbook destworkBook = excelApplication.Workbooks.Open(toWorkbook);
      Excel.Worksheet srcworkSheet = srcworkBook.Worksheets[fromSheet];
      Excel.Worksheet destworkSheet = destworkBook.Worksheets[toSheet];
      destworkBook.Close();
      srcworkBook.Close();
      excelApplication.Quit();
    }

Программа завершается ошибкой, поскольку вторая рабочая книга destworkBook имеет значение null, т.е. метод open не может создать объект рабочей книги.Это также не проблема с самим файлом;если я изменю порядок и сначала открою destworkBook, то srcworkBook станет null.

Что я делаю не так?

1 Ответ

1 голос
/ 20 мая 2019

Аааааа, это оказалось действительно глупо. Проблема, с которой я столкнулся, заключается в том, что я пытался открыть две книги в разных папках , но с одинаковым именем . Если вы попытаетесь сделать это вручную, Excel выдаст сообщение об ошибке, в котором говорится, что он не может одновременно открыть две книги с одинаковым именем, но в C # вместо исключения вы получите значение null. После того, как я переименовал вторую книгу под другим именем, я смог открыть обе книги в одном объекте приложения Excel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...