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

使用OpenXML读取Excel跳过空单元格并兼容26列以上的方案咨询

修复后兼容任意列数的实现代码

private static int CellReferenceToIndex(Cell cell)
{
    int index = 0;
    string reference = cell.CellReference?.ToString().ToUpper() ?? string.Empty;
    foreach (char ch in reference)
    {
        if (char.IsLetter(ch))
        {
            // 适配Excel无0值的26进制列名规则
            index = index * 26 + (ch - 'A' + 1);
        }
        else
        {
            // 遇到行号数字就终止遍历,转成0基索引返回
            return index - 1;
        }
    }
    // 兼容无行号的异常引用场景
    return index - 1;
}

代码说明

原有代码的进位逻辑在处理3位及以上列名(比如AAA、XFD这类超过2位字母的列名)时会出现计算偏差,上述实现采用了标准的Excel列名转换规则,兼容Excel支持的最大16384列(对应列名XFD)的所有场景,不会出现超过26列后索引错位的问题。

配套读取逻辑参考

配合该方法读取行数据时无需按位置取单元格,直接按索引赋值即可自动跳过空单元格,避免错位:

// 已提前按Excel最大列数初始化好DataTable
DataRow dataRow = dataTable.NewRow();
foreach (Cell cell in row.Descendants<Cell>())
{
    int colIndex = CellReferenceToIndex(cell);
    if (colIndex >= 0 && colIndex < dataTable.Columns.Count)
    {
        // 此处替换为你自己的单元格值读取逻辑
        dataRow[colIndex] = GetCellValue(cell);
    }
}
dataTable.Rows.Add(dataRow);

内容的提问来源于stack exchange,提问作者Tech Learner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:06:07