2017-04-20 7 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

あなたはでき各行をループした行はこのようなnullであるかどうかを確認:

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が私のために動作していないようでした。理由を問わず、解析しようとしているスプレッドシートには何百もの空の行が含まれているように見えますが、nullはありません。いくつかのデータがある点としてそこに入れられ、クリアされたように見えます。私は有効な行を返すために、以下のコードで終わった。理論的には、何もできます!row.Elements()。任意のチェック(ce => ce.DataType!= null)の場合は

List<Row> rows = sheetData.Elements<Row>() 
    .Where(r => r.Elements<Cell>().Any(ce => ce.DataType != null) 
    ) 
    .ToList() 
    ; 
関連する問題