Экспорт в Excel выдает ошибку при сохранении только в веб-приложении - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь экспортировать данные из моего веб-приложения в Excel

Это мой класс ExcelExport

using Excel = Microsoft.Office.Interop.Excel;

public static class ExcelExport
{
    public static void ExportDataTableToExcel(DataTable table, string filePath, bool overwrite = false)
    {
        if (File.Exists(filePath))
        {
            if (overwrite)
                File.Delete(filePath);
            else return;
        }

        Excel.Application excelApp = new Excel.Application();
        Excel.Workbook excelWorkBook = excelApp.Workbooks.Add();
        Excel.Worksheet excelWorkSheet = excelWorkBook.Sheets.Add();

        excelWorkSheet.Name = table.TableName;

        for (int i = 1; i < table.Columns.Count + 1; i++)
            excelWorkSheet.Cells[1, i] = table.Columns[i - 1].ColumnName;

        for (int j = 0; j < table.Rows.Count; j++)
        for (int k = 0; k < table.Columns.Count; k++)
            excelWorkSheet.Cells[j + 2, k + 1] = table.Rows[j].ItemArray[k].ToString();

        excelWorkBook.SaveAs(filePath);
        excelWorkBook.Close();
        excelApp.Quit();         
    }

    public static void Main(string[] args)
    {
        DataTable table = new DataTable("test");
        table.Columns.AddRange(
            new []
            {
                new DataColumn("Id", typeof(int)),
                new DataColumn("Name", typeof(string))
            }
        );

        DataRow row = table.NewRow();
        row["Id"] = 1;
        row["Name"] = "Me";

        table.Rows.InsertAt(row, 1);

        ExportDataTableToExcel(table, @"c:\temp\bla.xlsx", true);
    }

}

Как видите, есть также Main-метод.Когда я пытаюсь запустить это как консольное приложение, это работает нормально.Когда я запускаю это в своем веб-приложении (вызывая ту же функцию с теми же параметрами, даже вызывая Main()), я получаю следующее исключение в excelWorkBook.SaveAs(filePath);:

System.Runtime.InteropServices.COMException: «Исключение из HRESULT: 0x800A03EC»

Есть идеи, что может пойти не так?Или вы знаете какие-нибудь обходные пути?

1 Ответ

0 голосов
/ 22 февраля 2019

Я нашел решение, чтобы сделать эту работу:

Вместо SaveAs вы можете использовать excelWorkBook.SaveCopyAs(filePath);, и оно работает.Не уверен, почему это работает по-другому / лучше, чем SaveAs, но работает.

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