我有一个显示来自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] = "";
}
}
}
}
为什么会发生这种情况的任何想法,或者如何让我的应用程序忽略该错误并继续运行。
答案 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 != ""
或类似的东西。