Чтение из файла 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? Кроме того, если строка пуста, как мне определить, чтобы я мог пропустить ее, не читая, что каждый столбец имеет значение для данной строки.

4 ответа

Решение

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

var row = ws1.Row(3);

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

bool empty = row.IsEmpty();

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

var cell = row.Cell(3);

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

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

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

Вот мой джем.

var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row
foreach (var row in rows)
{
    var rowNumber = row.RowNumber();
    // Process the row
}

Если вы просто используете .RowsUsed()Ваш диапазон будет содержать огромное количество столбцов. Намного больше, чем на самом деле заполнено!

Так что используйте .RangeUsed() сначала ограничить диапазон. Это поможет вам быстрее обработать файл!

Вы также можете использовать .Skip(1) пропустить строку заголовка столбца (если она есть).

Я предпочитаю использовать 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's data
           var cell = dataRow.Cell(3).Value;
       }
    }
}

Это работает легко

       XLWorkbook workbook = new XLWorkbook(FilePath);
 var rowCount = workbook.Worksheet(1).LastRowUsed().RowNumber();
 var columnCount = workbook.Worksheet(1).LastColumnUsed().ColumnNumber();
 int column = 1;
 int row = 1;
 List<string> ll = new List<string>();
 while (row <= rowCount)
 {
      while (column <= columnCount)
      {
         string title = workbook.Worksheets.Worksheet(1).Cell(row, column).GetString();
                ll.Add(title);
                column++;
       }

 row++;
 column = 1;
}
Другие вопросы по тегам