如何使用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
相关产品推荐
相关产品推荐

