Как удалить пустые ячейки и строки из файла с помощью ExcelDataReader? - PullRequest
0 голосов
/ 05 июня 2018

Я использую ExcelDataReader для чтения файла Excel, но файл, который обрабатывается, имеет 16 тыс. Столбцов и 1200 записей в каждом.В промежутке только 52 столбца заполнены, другие пустые, поэтому я хочу удалить пустые столбцы со строками.

пробовал с:

var dataset = reader.AsDataSet(new ExcelDataSetConfiguration() {
    ConfigureDataTable = _ => new ExcelDataTableConfiguration() {
        FilterRow = rowReader => rowReader.Depth != 0
    }
});

помощь будет оценена спасибо

1 Ответ

0 голосов
/ 20 августа 2018

AFAIK, не существует простого способа отфильтровать пустые столбцы или строки для него. Моя лучшая попытка:

// use ExcelDataTableConfiguration.FilterRow to filter empty rows
FilterRow = rowReader =>
{
    var hasData = false;
    for (var i = 0; i < rowReader.FieldCount; i++)
    {
        if (rowReader[i] == null || string.IsNullOrEmpty(rowReader[i].ToString()))
        {
            continue;
        }

        hasData = true;
        break;
    }

    return hasData;
},
// use ExcelDataTableConfiguration.FilterColumn to filter empty columns
FilterColumn = (rowReader, colIndex) =>
{
    var hasData = false;
    rowReader.Reset();

    // this will skip first row as it is name of column
    rowReader.Read();

    while (rowReader.Read())
    {
        if (rowReader[colIndex] == null || 
            string.IsNullOrEmpty(rowReader[colIndex].ToString()))
        {
            continue;
        }

        hasData = true;
        break;
    }

    // below codes do a trick!
    rowReader.Reset();
    rowReader.Read();

    return hasData;
}

Использование IExcelDataReader аргументов внутри FilterRow или FilterColumn - зло!
Я думаю, что в основном reader и каждый rowReader ссылаются на один объект!так что вы всегда должны знать, как их использовать, как вы можете видеть, я добавил трюк, чтобы читатель был готов после его использования.- HTH;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...