2017-04-20 57 views
1

我想檢查電子表格中標題行旁邊的行是否爲空。如果它是空的,我想刪除表單。到目前爲止,我只能看到單元格A2並檢查它是否爲空,但有沒有辦法檢查整行?OpenXML如何檢查表單中的某行是否爲空

感謝

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); 
    } 

} 

回答

1

您可以通過每一行循環,並檢查該行是空這樣的:

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); 
    } 
} 
0

約翰,試圖行== NULL似乎並沒有爲我工作。無論出於何種原因,我們試圖解析的電子表格似乎都有數百個空行,但不是空行。看起來有些數據是作爲某個點放入並清除的。我結束了下面的代碼來返回有效的行。理論上你可以在任何支票上做!row.Elements()。任何(ce => ce.DataType!= null)

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