OpenXML 如何检查 sheet 中的一行是否为空

OpenXML how to check if a row is empty in a sheet

我想检查 header 行旁边的一行是否为跨页sheet 中的空行。如果它是空的,我想删除 sheet。到目前为止,我只能让它查看单元格 A2 并检查它是否为空,但是有没有办法检查整行?

谢谢

private void CheckForEmptyRow(WorkbookPart wbp, string sheetId)
{
   Sheet sheet = wbp.Workbook.Descendants<Sheet>().FirstOrDefault(s => s.Id == sheetId);
   WorksheetPart wsp = (WorksheetPart).(wbp.GetPartById(sheetId));
   Cell cell = wsp.Worksheet.Descendants<Cell>().Where(c => c.CellReference == "A2").FirstOrDefault();

   If (cell == null)
   {
       sheet.Remove();
       wbp.DeletePart(wsp);
   }

}

您可以遍历每一行并检查该行是否为空,如下所示:

private void CheckForEmptyRow(WorkbookPart wbp, string sheetId)
{
   Sheet sheet = wbp.Workbook.Descendants<Sheet>().FirstOrDefault(s => s.Id == sheetId);
   WorksheetPart wsp = (WorksheetPart).(wbp.GetPartById(sheetId));
   IEnumerable<SheetData> sheetData = wsp.Worksheet.Elements<SheetData>();
   bool isRowEmpty = false;

   foreach (SheetData SD in sheetData)
   {
      IEnumerable<Row> row = SD.Elements<Row>(); // Get the row IEnumerator

      if (row == null)
      {
          isRowEmpty = true;
          break;
      }
   }

   if (isRowEmpty)
   {
       sheet.Remove();
       wbp.DeletePart(wsp);
   }
}

John,尝试 row==null 似乎对我不起作用。无论出于何种原因,我们试图解析的电子表格似乎有数百个空行,但不是空行。看起来有些数据作为某个点被放入那里并被清除。我最终使用下面的代码 return 我的有效行。理论上你可以在任何检查上做 !row.Elements().Any(ce => ce.DataType != null)

    List<Row> rows = sheetData.Elements<Row>()
     .Where(r => r.Elements<Cell>().Any(ce => ce.DataType != null)
     )
     .ToList()
    ;