在C#中使用ClosedXml将单元格值转换为int时遇类型转换异常
解决ClosedXML中单元格转int类型的报错问题
你遇到的InvalidCastException是因为代码里直接对XLCell对象执行Convert.ToInt32()转换,而不是单元格内的数值。feuille.Cell()方法返回的是XLCell类型实例,它并没有实现IConvertible接口,所以无法直接被转换为int。
修复方案
以下几种方式都可以解决问题:
- 获取单元格值后再转换
var kmCell = feuille.Cell("C" + num.Substring(1, 1)); return Convert.ToInt32(kmCell.Value);
- 使用ClosedXML提供的类型安全取值方法(推荐)
ClosedXML内置了直接获取指定类型值的方法,无需手动转换:
var km = feuille.Cell("C" + num.Substring(1, 1)).GetValue<int>(); return km;
- 增加异常处理(可选)
如果需要处理值为空或格式异常的情况,可以添加判断逻辑:
var kmCell = feuille.Cell("C" + num.Substring(1, 1)); if (int.TryParse(kmCell.Value?.ToString(), out int intValue)) { return intValue; } // 根据业务需求处理异常情况,比如返回默认值或抛出异常 return 0;
内容的提问来源于stack exchange,提问作者Roumilhac Clément
相关产品推荐
相关产品推荐

