【问题】
C#中,通过代码:
Excel.Application xlApp = new Excel.Application(); Excel.Workbook xlWorkBook; Excel.Worksheet xlWorkSheet; object misValue = System.Reflection.Missing.Value; xlApp = new Excel.ApplicationClass(); xlWorkBook = xlApp.Workbooks.Add(misValue); xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); int i = 0; int j = 0; //save header for (i = 0; i <= dgvSearchResult.ColumnCount - 1; j++) { xlWorkSheet.Cells[0, i] = dgvSearchResult.Columns[i].HeaderText; }
去将数据保存到excel中,结果在:
xlWorkSheet.Cells[0, i] = dgvSearchResult.Columns[i].HeaderText;
时出错:
An unhandled exception of type ‘System.Runtime.InteropServices.COMException’ occurred in mscorlib.dll Additional information: Exception from HRESULT: 0x800A03EC |
【解决过程】
1.参考之前的相关代码:
//save cells for (i = 1; i <= dgvSearchResult.RowCount - 1; i++) { for (j = 0; j <= dgvSearchResult.ColumnCount - 1; j++) { DataGridViewCell cell = dgvSearchResult[j, i]; if (j == girUrlColumnIdx) { xlWorkSheet.Cells[i + 1, j + 1] = cell.Tag.ToString(); } else { xlWorkSheet.Cells[i + 1, j + 1] = cell.Value; } } }
貌似,对于cell[0,0],是个特殊的值,所以无法直接赋值。
2.所以去改为:
xlWorkSheet.Cells[0+1, i+1] = dgvSearchResult.Columns[i].HeaderText;
试试,结果代码执行异常,没有按照预料的,执行后续的代码。
但是的确错误没了。
【总结】
后来的研究表明,column[0]和row[0],对应的是excel的左边竖向的索引号那列,和顶部的从左到右的标题列:
所以,在excel中,去给column0或row0赋值时:
xlWorkSheet.Cells[0, i] = dgvSearchResult.Columns[i].HeaderText;
会出错。
解决办法是:
空出column和row0,从余下的
cells[i+1, j+1]
去赋值,即可:
//save header for (i = 0; i <= dgvSearchResult.ColumnCount - 1; i++) { xlWorkSheet.Cells[0+1, i+1] = dgvSearchResult.Columns[i].HeaderText; } //save cells for (i = 0; i <= dgvSearchResult.RowCount - 1; i++) { for (j = 0; j <= dgvSearchResult.ColumnCount - 1; j++) { DataGridViewCell cell = dgvSearchResult[j, i]; if (j == girUrlColumnIdx) { xlWorkSheet.Cells[i + 2, j + 1] = cell.Tag.ToString(); } else { xlWorkSheet.Cells[i + 2, j + 1] = cell.Value; } } }
转载请注明:在路上 » 【已解决】C#中保存数据到Worksheet结果出错:An unhandled exception of type ‘System.Runtime.InteropServices.COMException’ occurred in mscorlib.dll。Additional information: Exception from HRESULT: 0x800A03EC