是否有SAX的方式来循环OpenXML行?

我使用SAX方法parsing大文件:使用Open XML SDKparsing和读取大型Excel文件

这是我的修改版本(为简单起见,只获取行号)

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

问题是这遍历每个项目/单元格/列/什么,只有当元素types是行。

是否有一个SAX的方式来循环只通过行,而不是工作表中的每个项目?

谢谢,

关键是使用阅读器的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. } }