C#向Excel工作表单元格写入值触发TargetInvocationException异常如何解决
问题核心原因
你遇到的这个异常本质是封装了底层实际错误的包装异常,90%以上的概率是Excel单元格的行/列索引是从1开始计数,而你用了C#默认的0基索引访问,当i=0时调用Cells[2, 0]访问了不存在的第0列,直接触发底层报错。
修复方案
直接把列索引偏移1位即可,修改后的代码如下:
for (int i = 0; i < intColumnCount; i++) { strColumnName = dataPHLIP251.Columns[i].ToString(); // 列索引从1开始,所以i加1 excelWorksheet.Cells[2, i + 1].Value = strColumnName; }
其他排查建议
如果修改后还是报错,可以加try catch捕获异常查看内部错误,就能直接定位根因:
try { for (int i = 0; i < intColumnCount; i++) { strColumnName = dataPHLIP251.Columns[i].ToString(); excelWorksheet.Cells[2, i + 1].Value = strColumnName; } } catch (System.Reflection.TargetInvocationException ex) { // 输出内部异常的信息,就是实际报错的原因 Console.WriteLine(ex.InnerException?.Message); }
另外可以额外确认两点:
excelWorksheet已经完成初始化,不是nullintColumnCount的取值和dataPHLIP251.Columns.Count一致,不会出现数组越界访问数据源列的情况
内容的提问来源于stack exchange,提问作者user16188164
相关产品推荐
相关产品推荐

