У меня есть функция, которая берет URL-адрес в файл Excel, а затем экспортирует его в формате PDF:
public static void ExportFromExcel(string url)
{
// Create COM Objects
Application excelApplication = new Application();
Workbook excelWorkbook =
excelApplication.Workbooks.Open(HttpContext.Current.Server.MapPath(url));
try
{
// Call Excel's native export function
excelWorkbook.ExportAsFixedFormat(
XlFixedFormatType.xlTypePDF,
HttpContext.Current.Server.MapPath(url.Replace(".xlsx", ".pdf")));
}
catch (Exception ex)
{
}
finally
{
// Close the workbook, quit Excel, and clean up regardless of the results
excelWorkbook.Close(); // HANGS AND FAILS HERE
excelApplication.Quit();
excelApplication = null;
excelWorkbook = null;
}
}
Что я делаю, это создание файла Excel, а затем сразу же создание PDFиз этого файла:
using (FileStream fs = File.Create(HttpContext.Current.Server.MapPath(filePath)))
{
byte[] data = pck.GetAsByteArray();
fs.Write(data, 0, data.Length);
}
Pdf.ExportFromExcel(filePath);
Он прекрасно создаст файл Excel, а также создаст PDF.Но страница зависает долго, а затем выдает ошибку на excelWorkbook.Close();
в моем pdf-коде:
Ошибка удаленного вызова процедуры.(Исключение из HRESULT: 0x800706BE)
Хотя файлы действительно создаются.Но если я перейду в каталог файлов, там также будет временный файл Excel (мое имя файла Excel с ~$
перед ним).
Если я попытаюсь удалить свой файл Excel, я получуошибка, связанная с тем, что файл используется другим процессом, и я не могу удалить свой файл Excel, пока не уничтожу EXCEL.EXE в диспетчере задач.
Так что по какой-то причине мой файл Excel не закрываетсяпосле завершения создания PDF.Я что-то не так делаю в своем коде?