You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#读取Excel空单元格报错处理及批量读取单元格代码优化问询

C# 读取Excel单元格常见问题解决方案

问题1:空单元格读取报错处理

报错核心原因是空单元格的Value属性会返回null或DBNull.Value,直接调用ToString()会触发空引用异常。你可以按照如下逻辑提前判空,同时兼容格式错误的异常:

// 先接收单元格原始值
object cellValue = sh.Cells[26, 2].Value;
double test = 0;
// 判空+安全转换
if (cellValue != null && cellValue != DBNull.Value)
{
    // 优先用double.TryParse避免格式不匹配报错
    if (double.TryParse(cellValue.ToString(), out double parsedVal))
    {
        test = parsedVal;
    }
    else
    {
        // 格式错误时可自定义默认值
        test = 0;
    }
}
else
{
    // 单元格为空时的默认值处理
    test = 0;
}

也可以封装成通用方法简化调用:

public static double ReadCellToDouble(Worksheet sheet, int row, int col, double defaultValue = 0)
{
    object val = sheet.Cells[row, col].Value;
    if (val == null || val == DBNull.Value) return defaultValue;
    return double.TryParse(val.ToString(), out double res) ? res : defaultValue;
}

// 调用示例
double test = ReadCellToDouble(sh, 26, 2);

问题2:简化连续单元格读取操作

连续单元格不需要逐行定义变量,直接用循环读取后存入集合即可,配合上面封装的通用读取方法,代码可以大幅简化:

// 定义存储结果的集合,索引对应行号偏移
List<double> results = new List<double>();
// 行号范围26到31,共6行
for (int row = 26; row <= 31; row++)
{
    results.Add(ReadCellToDouble(sh, row, 2));
}

// 后续使用直接按索引取值即可
double test1 = results[0]; // 对应原26行的值
double test2 = results[1]; // 对应原27行的值
// 以此类推

如果需要调整读取范围,只需要修改循环的起止行号即可,不需要新增重复代码。


内容的提问来源于stack exchange,提问作者Lukas Klossek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:45:04