解析XLS时跳过某些行和列

问题描述 投票:0回答:1

我正在使用以下代码通过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跳过特定的列和行?

c# parsing unity3d xls exceldatareader
1个回答
0
投票

您正在执行以下操作

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();
    }
} 
© www.soinside.com 2019 - 2024. All rights reserved.