我正在使用以下代码通过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();
}
}