解析 XLS 时跳过某些行和列

Skip certain Rows and Columns while Parsing XLS

我使用以下代码通过 ExcelDataReader 解析 XLS 文件。我想排除前三行,前两列,然后是 9 之后的任何列。

//create the reader
var reader = ExcelReaderFactory.CreateReader(stream);
var result = reader.AsDataSet();

//remove the first 3 rows
DataRowCollection dt = result.Tables[0].Rows;
dt.RemoveAt(0);
dt.RemoveAt(1);
dt.RemoveAt(2);
//exclude the column 1 and2 and any columns after 9
for (int columnNumber = 2; columnNumber < 8; columnNumber++)
{
    foreach (DataRow dr in dt)
    {
        Debug.Log(dr[columnNumber].ToString());
        msg += dr[columnNumber].ToString();
    }
}

不幸的是,它没有按预期跳过行和列。如何使用 excelDataReader 跳过特定的列和行?

您正在执行以下操作

dt.RemoveAt(0);
dt.RemoveAt(1);
dt.RemoveAt(2);

当第一行执行时,行重新索引,1 变为 0,2 变为 1,依此类推。

当第二行执行时,您现在已经删除了原来位于位置 2 的行。这些行再次重新编制索引。

当第三行执行时,您将再次删除不正确的行。

因此,当此过程完成时,它将删除最初位于 0、2 和 4 的行。

更改代码以删除正确的行,或者使用 linq 或 for 循环跳过三行。

使用 for 循环的示例(未测试)。

//create the reader
var reader = ExcelReaderFactory.CreateReader(stream);
var result = reader.AsDataSet();

DataRowCollection dt = result.Tables[0].Rows;
//ignore the first 3 rows
for(int dataRowCount = 3; dataRowCount < dt.Count; dataRowCount++)
{
    //exclude the column 1 and 2 and any columns after 9
    for (int columnNumber = 2; columnNumber < 8; columnNumber++)
    {
        Debug.Log(dr[dataRowCount][columnNumber].ToString());
        msg += dr[dataRowCount][columnNumber].ToString();
    }
}