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

时间:2017-11-03 13:33:03

标签: c# excel visual-studio office-interop

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

以下是我在Windows窗体中的“导出到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] = "";
                }
            }
        }
    }

为什么会发生这种情况的任何想法,或者如何让我的应用程序忽略该错误并继续运行。

2 个答案:

答案 0 :(得分:2)

使用try ... catch ...

包围发出异常的代码行

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

答案 1 :(得分:1)

一般情况下,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 != ""或类似的东西。