从HRESULTexception:0x800A03EC错误粘贴特殊的datagridview-excel

我试图导出一个excel的datagridview。 我发现了一个非常好的解决scheme, 复制粘贴解决scheme ,但是这个exception出现了。

这是我的代码,与我find的解决scheme相同的代码。

void botonCP_Click(object sender, EventArgs e) { Microsoft.Office.Interop.Excel.Application xlexcel; Microsoft.Office.Interop.Excel.Workbook xlWorkBook; Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet; object misValue = System.Reflection.Missing.Value; xlexcel = new Microsoft.Office.Interop.Excel.Application(); xlexcel.Visible = true; xlWorkBook = xlexcel.Workbooks.Add(misValue); xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); Microsoft.Office.Interop.Excel.Range CR = (Microsoft.Office.Interop.Excel.Range)xlWorkSheet.Cells[1, 1]; CR.Select(); xlWorkSheet.PasteSpecial(CR, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, true); } 

在我看来,如果你不需要的话,interop是非常令人讨厌的。 释放资源是一个PIA,人们似乎经常遇到这些小问题(诚然,这可能是我对这个问题缺乏认识!)。

对我来说,我只是使用一个像EPPlus这样的库来实现这个目标。

像这样的东西应该服务好,并且(IMO)会更容易编写,pipe理和debugging:

 //Get DataGridView into a DataTable: var bindingSource = (BindingSource)dataGridView.DataSource; var dataView = (DataView)bindingSource.List; var dataTable = dataView.Table; //Create a Spreadsheet using (ExcelPackage excelPackage = new ExcelPackage()) { ExcelWorksheet ws = excelPackage.Workbook.Worksheets.Add("DataExport"); ws.Cells[1,1].LoadFromDataTable(dataTable, PrintHeaders:true); //Write to an outputstream: excelPackage.SaveAs(outputStream); //or filesystem: excelPackage.SaveAs(new FileInfo(@"C:\Temp\Export.xlsx")); } 

更容易!