我有以下扩展方法从excel文件中读取行。但是,excel文件太大(超过500K行和900列),我希望无论如何都要读取部分的excel文件(例如,每次5K行)。
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();
}
}
}
}
而不是使用&#39; yeild&#39;我尝试将XElements添加到List(每5K行)并返回List,但执行时间比预期要多。
我没有想法,感谢任何帮助。
答案 0 :(得分:0)
尝试使用ClosedXML。您可以在此处找到:https://closedxml.codeplex.com/和NuGet:https://www.nuget.org/packages/ClosedXML/
此库完全支持对Excel文档的操作(2007版之后,例如.xlsx文件)
玩得开心;)