使用Microsoft.Office.Interop.Word获取表格单元格值无法转数值求助
使用Microsoft.Office.Interop.Word读取单元格文本时,返回的内容末尾默认会携带Word内部的单元格结束标记,也就是\r(回车符)和\a(响铃符)两个字符,这就是导致类型转换失败的原因。
解决方法
1. 直接清理特殊字符
拿到原始文本后,移除这两个特殊字符即可,代码示例:
var cell = objTab1.Cell( iRow, iCol-2 ); string rawText = cell.Range.Text; // 清理末尾的单元格结束标记 string cleanText = rawText.TrimEnd('\r', '\a'); // 如需更稳妥,可全局替换所有目标特殊字符,避免特殊场景下标记位置异常 // cleanText = rawText.Replace("\r", "").Replace("\a", "").Trim(); // 之后就可以正常转换类型 decimal deudaInicial = Convert.ToDecimal(cleanText);
2. 封装通用方法(推荐)
可以把清理逻辑封装为复用方法,减少重复代码:
private string GetPureCellContent(Microsoft.Office.Interop.Word.Cell cell) { if (cell == null || cell.Range == null) return string.Empty; return cell.Range.Text.Replace("\r", "").Replace("\a", "").Trim(); }
使用时直接调用方法即可:
string text = GetPureCellContent(objTab1.Cell(iRow, iCol-2));
额外容错建议
转换数值类型时建议使用TryParse做容错处理,避免单元格内容为空或格式异常时抛出错误:
if (decimal.TryParse(GetPureCellContent(objTab1.Cell(iRow, iCol-2)), out decimal val)) { // 正常执行计算逻辑 } else { // 自定义格式异常的处理逻辑 }
内容的提问来源于stack exchange,提问作者angel_neo
相关产品推荐
相关产品推荐

