【问题标题】:Export datagridview content to excel将datagridview内容导出到excel
【发布时间】: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


【解决方案1】:

确保您为您的计算机上安装的 excel 版本引用了正确的互操作 dll。

在您的参考资料中,您会看到一个 excel 版本。您需要确保在加载 DLL 的机器上安装了该版本的 excel。

【讨论】:

  • 但是如果引用错误,它不会在代码中显示错误吗?
  • 不,因为它是一个 COM 类,并且 dll 本身是在运行时加载的
  • 我真是个菜鸟:(你能告诉我如何检查参考是否正常吗?
  • 添加引用时有版本号。您也可以右键单击参考并检查那里的版本。
  • 我找到了,上面写着 Microsoft Excel 2013 :D 我有 2007 :D 哈哈哈非常感谢朋友 :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-09
  • 2013-09-11
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
  • 2012-03-30
  • 1970-01-01
相关资源
最近更新 更多