导出到Excel仅在Web应用程序中会在SaveAs处引发错误

时间:2019-02-22 10:02:52

标签: c# excel asp.net-mvc

我正在尝试将Web应用程序中的数据导出到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方法。当我尝试将其作为控制台应用程序运行时,效果很好。 当我在Web应用程序中运行此程序(使用相同的参数调用相同的函数,甚至调用Main())时,我在excelWorkBook.SaveAs(filePath);处遇到了以下异常:

  

System.Runtime.InteropServices.COMException:“来自HRESULT的异常:0x800A03EC”

有什么想法可能出问题吗?或者您知道任何解决方法?

1 个答案:

答案 0 :(得分:1)

我找到了解决方案,使之可行:

您可以使用SaveAs代替excelWorkBook.SaveCopyAs(filePath);,它可以工作。 不确定为什么它会以除SaveAs之外的其他方式/更好的方式工作,但是它可以工作。