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

如何使用OpenXml从指定行读取Excel并包含空行转JSON

解决OpenXml读取Excel时保留指定行后空行的问题

你的代码核心问题是遇到空行时直接用break终止了循环,导致空行被跳过的同时,后续所有行也不再处理。要保留第6行之后的空行,只需要移除这个终止逻辑,确保从第6行开始的每一行都生成对应的记录即可。

修改后的代码如下:

int startRowNum = 6; // 起始读取行号
int rowNum = 1; // 从工作表第一行开始计数

// 遍历所有行并将单元格数据转换为记录
foreach (Row row in rows)
{
    if (rowNum >= startRowNum)
    {
        InterfaceRecord record = new InterfaceRecord();
        int columnNumber = 1;

        foreach (Cell cell in row.Elements<Cell>())
        {
            string columnName = GetColumnName(columnNumber);
            string cellValue = GetCellValue(cell, spreadsheetDocument);

            if (columnName == properties.SampleNumber)
            {
                record.SampleNumber = cellValue;
            }
            else if (columnName == properties.ValueColumn)
            {
                decimal value = 0;
                decimal.TryParse(cellValue, NumberStyles.Any, CultureInfo.InvariantCulture, out value);
                record.Value = decimal.Round(value, properties.RoundingNumber);
            }

            columnNumber++;
        }

        // 设置固定属性
        record.CreatedAt = DateTime.Now;
        record.MachineName = properties.MachineName;
        record.ClientID = properties.ClientID;

        interfaceRecords.Add(record);
    }

    rowNum++;
}

关键修改点:

  • 移除了原代码中判断空行就终止循环的break语句,现在会完整遍历从第6行开始的所有行
  • 无论当前行是否有数据,都会创建InterfaceRecord实例并添加到结果列表中
  • 空行对应的SampleNumber会是GetCellValue返回的空值(通常为空字符串),Value会是0(因为decimal.TryParse解析空值时返回默认值0)

修改后生成的JSON会包含空行对应的记录,示例如下:

{
    "SampleNumber": "31119-12",
    "Value": 0.00446,
    "CreatedAt": "2023-03-15T17:06:44.5118565+02:00",
    "ClientID": 123,
    "MachineName": "Analyzer A"
  },
  {
    "SampleNumber": "",
    "Value": 0,
    "CreatedAt": "2023-03-15T17:06:44.5122332+02:00",
    "ClientID": 123,
    "MachineName": "Analyzer A"
  },
  {
    "SampleNumber": "31119-13",
    "Value": 0.01343,
    "CreatedAt": "2023-03-15T17:06:44.5122332+02:00",
    "ClientID": 123,
    "MachineName": "Analyzer A"
  },
  {
    "SampleNumber": "",
    "Value": 0,
    "CreatedAt": "2023-03-15T17:06:44.512247+02:00",
    "ClientID": 123,
    "MachineName": "Analyzer A"
  }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:52:48