我有一个包含 4 个工作表的 Excel 文件。但是,当我在 C#(.NET Core 3.1)代码中读取第一个工作表时,它的行为不正确。该工作表大约有 350-450 个条目,有时它只读取...
我有一个包含 4 个工作表的 Excel 文件。但是,当我在 C#(.NET Core 3.1)代码中读取第一个工作表时,它的行为不正确。
该表大约有 350-450 个条目,有时它只读取 4 个空行,有时读取 450 行但仍然有 4 个额外的空行。然后我从末尾删除了一些空行,这样它就可以开始正确读取了。
这是我正在使用的代码:
public List<Dictionary<string, string>> ReadSheet(ExcelWorksheet worksheet)
{
try
{
_logger.LogInformation("No. of rows (including header) = " + worksheet.Rows.Count());
var headers = worksheet.Cells["A1:ZZ1"].Select(c => c.Text).ToList();
_logger.LogInformation("No. of headers > " + headers.Count);
List<Dictionary<string, string>> sheetData = new List<Dictionary<string, string>>();
int count = worksheet.Rows.Count();
for (int row = 2; row <= worksheet.Rows.Count(); row++)
{
Dictionary<string, string> rowData = new Dictionary<string, string>();
for (int col = 1; col <= headers.Count; col++)
{
rowData[headers[col - 1]] = worksheet.Cells[row, col].Text;
}
sheetData.Add(rowData);
}
_logger.LogInformation("Number of rows stored:" + sheetData.Count);
return sheetData;
}
catch (Exception ex)
{
_logger.LogError("Exception:" + ex);
throw ex;
}
}
我使用相同的代码读取所有其他工作表,它们具有正确的行数。
我使用的这个 Excel 是使用 Java 代码准备的,没有添加任何额外的行。我无法手动从末尾删除多余的空行。
请提供建议。提前致谢!
编辑:
我有 435 行 (包括标题)。
我得到了:
行数(包括标题)= worksheet.Rows.Count() = 439
行数(包括标题)= 工作表.尺寸.行数 = 442
看起来你可能正在以各种形式处理 \'#N/A\'。因此,结合评论中的出色阐述:
=IFS(ISNA($M5), FALSE, COUNTIFS($M5,"*#*N*/*A*"), FALSE, TRUE, COUNTIF($M$5:$M$2564,$M5) > 1)
或者
=AND(NOT(ISNA($M5)), NOT(COUNTIFS($M5,"*#*N*/*A*")), COUNTIF($M$5:$M$2564,$M5) > 1)
那么为何不,
=NOT(OR(ISNA($M5), ISBLANK($M5), COUNTIFS($M5,"*#*N*/*A*"), COUNTIF($M$5:$M$2564,$M5) = 1))
结果: