2011-07-05 15 views
2

私が上で提供されるSAXのアプローチを使用して、大きなファイルを解析しています: Parsing and Reading Large Excel Files with the Open XML SDKOpenXMLの行をループするSAXの方法はありますか?

これは私の修正版(だけ簡単にするために行番号を取得)

using (SpreadsheetDocument myDoc = SpreadsheetDocument.Open("BigFile.xlsx", true)) 
{ 
    WorkbookPart workbookPart = myDoc.WorkbookPart; 
    WorksheetPart worksheetPart = workbookPart.WorksheetParts.First(); 

    OpenXmlReader reader = OpenXmlReader.Create(worksheetPart); 
    String rowNum; 
    while (reader.Read()) 
    { 
     if (reader.ElementType == typeof(Row)) 
     { 
      if (reader.HasAttributes) 
       rowNum = reader.Attributes.First(a => a.LocalName == "r").Value 
     } 
    } 
} 

ある問題は、これが通じループするということです各項目/セル/列/その他の項目は要素タイプが行の場合にのみ作用します。

ワークシートのすべての項目ではなく、行のみをループするSAX方法はありますか?私はopenxmlreaderを使用して読みたいかorder.Basicallyの行に各cellvalueを取得する

おかげで、

答えて

2

鍵は、読者のSkip()ReadNextSibling()メソッドを使用することです...

using (SpreadsheetDocument myDoc = SpreadsheetDocument.Open("BigFile.xlsx", true)) 
{ 
    WorkbookPart workbookPart = myDoc.WorkbookPart; 
    WorksheetPart worksheetPart = workbookPart.WorksheetParts.First(); 
    OpenXmlReader reader = OpenXmlReader.Create(worksheetPart); 
    String rowNum; 
    while (reader.Read()) 
    { 
     if (reader.ElementType == typeof(Row)) 
     { 
      do 
      { 
       if (reader.HasAttributes) 
        rowNum = reader.Attributes.First(a => a.LocalName == "r").Value; 

      } while (reader.ReadNextSibling()); // Skip to the next row 
      break; // We just looped through all the rows so no need to continue reading the worksheet 
     } 

     if (reader.ElementType != typeof(Worksheet)) // Dont' want to skip the contents of the worksheet 
      reader.Skip(); // Skip contents of any node before finding the first row. 
    } 
} 
+0

openxmlwriterを使用して書き込みます。 – Ramya

関連する問題