Взаимодействие с Excel. Выход из экземпляра приложения Excel приводит к сбою моих тестов? - PullRequest
3 голосов
/ 24 февраля 2011

Я хочу инкапсулировать использование Excel Interop, чтобы упростить его использование в многократно используемой библиотеке.

Пока что я написал несколько тестов, которые в целом работают хорошо, за исключением того, что между каждым тестом язаставить Excel сделать так, чтобы он больше не обрабатывал тестовый файл, чтобы иметь возможность удалять.

После того, как я завершил работу экземпляра приложения после каждого из моих тестов, Excel, похоже, больше не отвечает, в результате чего Windows отображает

«Excel прекратил работу и ищет решение»

.Это сообщение длится несколько секунд, в то время как Excel закрывается, вызывая зависание файла, и мои тесты выдают исключение типа

"Невозможно получить доступ к файлу, поскольку он используетсядругой процесс ... "

сообщение.В противном случае каждый из моих тестов выполняется по отдельности, просто отлично!

Есть какие-либо подсказки, как решить эту проблему?

Не злоупотребляете ли вы методом ApplicationClass.Quit()?

Выход только из Excelпо завершении тестирования мои тесты приводят к невозможности удаления файлов, созданных для целей тестирования.

Спасибо!=)

Ответы [ 2 ]

2 голосов
/ 24 февраля 2011

Если вы внесли изменения в Workbook, то это может быть "Хотите ли вы сохранить изменения?"диалог, который держит вещи.Вы можете попробовать установить для свойства _Workbook.Saved значение True до выхода из приложения.Подробнее см. здесь

1 голос
/ 12 декабря 2011

У меня возникла та же проблема «Не удается получить доступ к файлу, потому что он используется другим процессом ...».

Я сохранял рабочий лист, вам нужно сохранить рабочую книгу.Вот полный пример.

private void TestCreateExcel(IEnumerable<Sales1> data)
    {
        var excelApp = new Excel.Application();
        var workBook = excelApp.Workbooks.Add();
        Excel._Worksheet workSheet = excelApp.ActiveSheet;

        workSheet.Cells[1, "A"] = "Title";
        workSheet.Cells[1, "B"] = "Author(s)";
        workSheet.Cells[1, "C"] = "Release Date";
        workSheet.Cells[1, "D"] = "Total Books Sold";
        workSheet.Cells[1, "E"] = "Last 30 Days Sales";
        workSheet.Cells[1, "F"] = "Average Sales Per Month";
        workSheet.Cells[1, "G"] = "Starting Advance";
        workSheet.Cells[1, "H"] = "Current Advance";

        int index = 1; //Keep track of the which row we're writing to.
        foreach (var n in data)
        {
            index++;
            workSheet.Cells[index, "A"] = n.Title;
            workSheet.Cells[index, "B"] = n.Author;
            workSheet.Cells[index, "C"] = n.ReleaseDate.ToShortDateString();
            workSheet.Cells[index, "D"] = n.TotalBooksSold;
            workSheet.Cells[index, "E"] = n.Last30DaysSales;
            workSheet.Cells[index, "F"] = n.AverageSalesPerMonth;
            workSheet.Cells[index, "G"] = n.StartingAdvance;
            workSheet.Cells[index, "H"] = n.CurrentAdvance;
        }

        workBook.SaveAs(Server.MapPath(filePath + fileName));
        excelApp.Quit();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...