2011-07-05 16 views
2

我解析使用SAX方法大文件上所提供: Parsing and Reading Large Excel Files with the Open XML SDK是否有SAX方式循環訪問OpenXML行?

這是我修改後的版本(只得到了簡單的行號)

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

的問題是,這個循環遍歷每個項目/單元格/列/ whatnot,並且僅在元素類型爲Row時起作用。

是否存在SAX方式來循環只通過行而不是工作表中的每個項目?

感謝,

回答

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

如何獲得在order.Basically行各cellvalue我想用openxmlreader閱讀並使用openxmlwriter寫入。 – Ramya

相關問題