Пропустить определенные строки и столбцы при разборе XLS - PullRequest
0 голосов
/ 11 февраля 2020

Я использую следующий код для разбора файла XLS с помощью ExcelDataReader. Я хотел бы исключить первые три строки, первые два столбца, за которыми следуют все столбцы после 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();
    }
}

К сожалению, строки и столбцы не пропускаются должным образом. Как пропустить указанные c столбцы и строки, используя excelDataReader?

1 Ответ

0 голосов
/ 11 февраля 2020

Вы делаете следующее

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

Когда выполняется первая строка, строки переиндексируются с 1 становится 0, 2 становится 1 и т. Д.

Когда вторая строка выполняет, теперь вы удалили строку, которая изначально была позицией 2. Строки снова переиндексируются.

Когда третья строка выполняется, вы снова удаляете неправильную строку.

В результате, когда этот процесс завершится, он удалит строки, которые были первоначально расположены в 0, 2 и 4.

Измените код, чтобы удалить правильные строки, или пропустите три строки с помощью linq или a для l oop.

Пример использования для l oop (не проверено).

//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();
    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...