38

我的 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

3 回答 3

46

要访问一行:

var row = ws1.Row(3);

要检查该行是否为空:

bool empty = row.IsEmpty();

要连续访问一个单元格(列):

var cell = row.Cell(3);

要从单元格中获取值:

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

有关详细信息,请参阅文档

于 2015-04-16T10:15:53.320 回答
19

这是我的果酱。

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)跳过列标题行(如果有的话)。

于 2018-05-04T20:56:45.993 回答
17

我更喜欢使用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;
       }
    }
}
于 2017-12-01T09:17:36.680 回答