Чтение из файла 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;
}
}
}