将数据导出到 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 != ""
或类似的东西。
我有一个代码显示来自 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 != ""
或类似的东西。