将数据导出到 excel 时应用程序停止

Application stop when exporting data to excel

我有一个代码显示来自 Access 数据库的 table,在我的 WinForm 上,我可以选择将 table 导出到 excel,一旦用户点击它需要一些时间将所有行复制到 excel,如果用户尝试在所有单元格传输到 sheet 之前关闭 excel,应用程序将停止并抛出错误 System.Runtime.InteropServices.COMException: 'Exception from HRESULT: 0x800AC472'

这是我 windows 表单中 "Export to Excel" 按钮的代码

        private void Export_btn_Click(object sender, EventArgs e)
    {
        Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();
        Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);
        Microsoft.Office.Interop.Excel._Worksheet worksheet = null;
        app.Visible = true;
        worksheet = workbook.Sheets["Sheet1"];
        worksheet = workbook.ActiveSheet;
        for (int i = 1; i < fviAoi_tbl.Columns.Count + 1; i++)
        {
            worksheet.Cells[1, i] = fviAoi_tbl.Columns[i - 1].HeaderText;
        }
        for (int i = 0; i < fviAoi_tbl.Rows.Count - 1; i++)
        {
            for (int j = 0; j < fviAoi_tbl.Columns.Count; j++)
            {
                if (fviAoi_tbl.Rows[i].Cells[j].Value != null)
                {
                    worksheet.Cells[i + 2, j + 1] = fviAoi_tbl.Rows[i].Cells[j].Value.ToString();
                }
                else
                {
                    worksheet.Cells[i + 2, j + 1] = "";
                }
            }
        }
    }

知道为什么会发生这种情况,或者我怎样才能使我的应用程序忽略该错误并继续 运行。

用 try...catch... 包围发出异常的代码行

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/exceptions/

一般来说,Null可能不是你想的那样。 Null 不是 0 也不是空字符串。 Null 缺少数据。 What is the difference between ("") and (null)

因此,C# 和 .NET 可能会在此处引发错误:

if (fviAoi_tbl.Rows[i].Cells[j].Value != null) 因为它不明白你如何比较一些 Excel 单元格与 Null 以及它应该回答什么。将代码更改为:

if (fviAoi_tbl.Rows[i].Cells[j].Value != "" 或类似的东西。