我有以下擴展方法來讀取Excel文件中的行。但是,excel文件太大(超過500K行和900列),我希望是否無論如何都要讀取部分的excel文件(例如,一次5K行)。如何使用XmlReader讀取零件中的xml?
static IEnumerable<XElement> StreamRows(this OpenXmlPart part)
{
using (StreamReader stringReader = new StreamReader(part.GetStream()))
using (XmlReader xmlReader = XmlReader.Create(stringReader))
{
xmlReader.MoveToContent();
while (!xmlReader.EOF)
{
if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "row")
{
XElement el = XElement.ReadFrom(xmlReader) as XElement;
if (el != null)
{
yield return el;
}
}
else
{
xmlReader.Read();
}
}
}
}
請不要使用「一代產量」我嘗試添加了XElements到列表(每5K行)並返回列表,但花了更多的時間比預期來執行。
我沒有想法和任何幫助表示讚賞。
與該代碼現在應該已經被閱讀的部分(逐行,流式)。你有什麼問題? – Evk
我[這裏回答](http://stackoverflow.com/questions/24829801/reading-a-large-excel-file-by-openxml/24865391#24865391)顯示瞭如何使用OpenXml讀取大型Excel文件。它在VB中,但它很容易轉換。 – petelids
@Evk當前代碼返回所有行(500K)的IEnumerable,當我嘗試迭代時,它需要很長時間。我期望做的是在一個循環中調用這個函數,以便一次讀取5k行。 –