【发布时间】:2017-06-26 23:42:02
【问题描述】:
我正在尝试将 datagridview 内容导出到 excel,但它会引发异常。 我有方法
private void exportDataGridToExcel(DataGridView grd)
{
if (saveFileToExcel.ShowDialog() != DialogResult.Cancel)
{
Microsoft.Office.Interop.Excel.Application Excel = new Microsoft.Office.Interop.Excel.Application();
Workbook wb;
Worksheet ws;
wb = Excel.Workbooks.Add();
ws = (Worksheet)wb.Worksheets.get_Item(1);
for (int i = 0; i < grd.Columns.Count + 1; i++)
{
ws.Cells[1, i] = grd.Columns[i - 1].HeaderText;
}
for (int i = 0; i <= grd.Rows.Count; i++)
{
for (int j = 0; j <= grd.Columns.Count; j++)
{
ws.Cells[i + 1, j + 1] = grd.Rows[i - 1].Cells[j].Value.ToString();
}
}
wb.SaveAs(saveFileToExcel.FileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal);
wb.Close(ws);
Excel.Quit();
}
}
当我点击按钮时,它会像这样调用该方法
private void btnCheck_Click(object sender, EventArgs e)
{
exportDataGridToExcel(dataDaily);
}
但它在这行代码中抛出异常Microsoft.Office.Interop.Excel.Application Excel = new Microsoft.Office.Interop.Excel.Application();这个异常:
“在 mscorlib.dll 中发生了“System.Runtime.InteropServices.COMException”类型的未处理异常
附加信息:检索具有 CLSID {00024500-0000-0000-C000-000000000046} 的组件的 COM 类工厂失败,原因是以下错误:80040154 未注册类(HRESULT 异常:0x80040154 (REGDB_E_CLASSNOTREG))。"
【问题讨论】:
-
我认为异常消息并没有说明太多错误,但是看看你的代码,似乎很少有错误,grd.Columns[i - 1].HeaderText [i - 1 ]??而您的索引从 0 开始;类似 grd.Rows[i - 1]
-
我删除了 - 1 并且我抛出了另一个异常 mscorlib.dll 中发生了“System.Runtime.InteropServices.COMException”类型的未处理异常附加信息:来自 HRESULT 的异常:0x800A03EC 当这行代码是调用 ws.Cells[1, i] = grd.Columns[i - 1].HeaderText;
-
数组的一般概念是它们是零索引的;话虽如此,grd.Columns[i - 1]?! (i - 1) 表示索引为-1,没有负值索引
标签: c# excel datagridview export-to-excel