Чтение из файла Excel с помощью ClosedXML

Мой файл Excel не находится в табличных данных. Я пытаюсь читать из файла excel. У меня есть разделы в моем файле excel, которые являются табличными.

Мне нужно перебирать строки с 3 по 20, которые являются табличными и считывают данные.

Вот часть моего кода:

     string fileName = "C:\\Folder1\\Prev.xlsx";
     var workbook = new XLWorkbook(fileName);
     var ws1 = workbook.Worksheet(1); 

Как мне перебирать строки с 3 по 20 и читать столбцы 3,4, 6, 7, 8? Также, если строка пуста, как определить, что я могу пропустить ее, не читая, что каждый столбец имеет значение для данной строки.

Ответы

Ответ 1

Чтобы получить доступ к строке:

var row = ws1.Row(3);

Чтобы проверить, является ли строка пустой:

bool empty = row.IsEmpty();

Чтобы получить доступ к ячейке (столбцу) в строке:

var cell = row.Cell(3);

Чтобы получить значение из ячейки:

object value = cell.Value;
// or
string value = cell.GetValue<string>();

Для получения дополнительной информации см. документация.

Ответ 2

Я предпочитаю использовать метод RowsUsed() для получения списка только тех строк, которые не являются пустыми или были отредактированы пользователем. Таким образом, я могу избежать проверки для каждой строки, является ли она пустой или нет.

Я не уверен, что он будет соответствовать точной постановке задачи, которую вы описали в своем сообщении, но этот фрагмент кода может помочь вам обрабатывать номера из 3-й и 20-й строки из всех непустых строк, поскольку я отфильтровал из пустых строк перед началом обработки. Фильтрация непустых строк до начала обработки может повлиять на номера строк, которые вы на самом деле собираетесь обрабатывать.

Но я чувствую, что метод RowsUsed() очень полезен в любом общем случае, когда вы обрабатываете строки листа excel.

string fileName = "C:\\Folder1\\Prev.xlsx";
using (var excelWorkbook = new XLWorkbook(fileName))
{
    var nonEmptyDataRows = excelWorkbook.Worksheet(1).RowsUsed();

    foreach (var dataRow in nonEmptyDataRows)
    {
       //for row number check
       if(dataRow.RowNumber() >=3 && dataRow.RowNumber() <= 20)
       {
           //to get column # 3 data
           var cell = dataRow.Cell(3).Value;
       }
    }
}