通过Linq选择包含第一列数据的Excel行

时间:2012-04-30 19:45:29

标签: linq openxml openxml-sdk

我正在尝试仅从Excel电子表格中选择第一列中包含数据的行。

这是我正在使用的代码:

        IEnumerable<Row> dataRows =
          from row in worksheet.Descendants<Row>()
          where (row.RowIndex > 2 
            && row.Descendants<Cell>().First().CellValue != null)
          select row;

当我运行此代码时,调试器告诉我“隐式转换时出错。无法转换null对象。”

我无法弄清楚null对象是什么。我假设每一行都有一个非空的第一个单元格(当然,有问题的单元格的CellValue可能为空)。

谁能告诉我这里做错了什么?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果行或单元格为空,则可以null。 null对象可以来自第一个单元格中没有值的行(并且从未初始化)。

因此,当您运行row.Descendants<Cell>().First().CellValue时,null对象来自.First(),该单元格尚未初始化。

尝试以下方法:

IEnumerable<Row> dataRows =
    from row in templateWorksheetPart.Worksheet.Descendants<Row>()
    where (row.RowIndex > 2 
        && row.Descendants<Cell>().First() != null                        
        && row.Descendants<Cell>().First().CellValue != null)
    select row;