阅读一个大的Excel文档
本文关键字:Excel 文档 一个 | 更新日期: 2023-09-27 18:03:30
我想知道在Excel中读取单元格的最快方法是什么。我有一个Excel文件,其中包含50000行,我想知道如何快速阅读它。我只需要阅读第一列,用旧的连接,我花了大约15秒。有更快的方法吗?
谢谢
这是一个依赖于使用Microsoft.Office.Interop.Excel的方法。
请注意:我使用的Excel文件只有一列,数据有50,000个条目。
1)用Excel打开文件,另存为csv格式,关闭Excel。
2)使用StreamReader快速读取数据。
3)拆分回车换行上的数据,并将其添加到字符串列表中。
4)删除我创建的csv文件。我使用System.Diagnostics.StopWatch来计时,函数运行需要1.5568秒。
public static List<string> ExcelReader( string fileLocation )
{
Microsoft.Office.Interop.Excel.Application excel = new Application();
Microsoft.Office.Interop.Excel.Workbook workBook =
excel.Workbooks.Open(fileLocation);
workBook.SaveAs(
fileLocation + ".csv",
Microsoft.Office.Interop.Excel.XlFileFormat.xlCSVWindows
);
workBook.Close(true);
excel.Quit();
List<string> valueList = null;
using (StreamReader sr = new StreamReader(fileLocation + ".csv")) {
string content = sr.ReadToEnd();
valueList = new List<string>(
content.Split(
new string[] {"'r'n"},
StringSplitOptions.RemoveEmptyEntries
)
);
}
new FileInfo(fileLocation + ".csv").Delete();
return valueList;
}
资源:http://www.codeproject.com/Articles/5123/Opening-and-Navigating-Excel-with-C
如何分割字符串上的回车与c# ?
您可以使用OLEDb提供程序读取50000条记录的代码吗?我试过这样做,它花了4-5秒来读取3列的50000条记录。我已按以下方法做了准备,请看一下,也许会对你有所帮助。:)
// txtPath.Text is the path to the excel file
string conString = @"Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + txtPath.Text + ";" + "Extended Properties=" + "'"" + "Excel 12.0;HDR=YES;" + "'"";
OleDbConnection oleCon = new OleDbConnection(conString);
OleDbCommand oleCmd = new OleDbCommand("SELECT field1, field2, field3 FROM [Sheet1$]", oleCon);
DataTable dt = new DataTable();
oleCon.Open();
dt.Load(oleCmd.ExecuteReader());
oleCon.Close();
如果你能把你的代码放在这里,这样我可以试着纠正。:)
OLEDB总是会花费更多的时间。
SQL Server 2005/2008将使它更快。
对于OLEDB连接,每秒需要7条记录,而
对于SQLServer,每秒需要70条记录。
读取以逗号分隔的文件不需要太多时间,但是插入数据需要时间。
我确实经历过这种事。
您只是想从文件中读取数字列表?一定要用Excel吗?是不是有非技术人员在更新列表?如果您想要将单个列中的50,000个数字读取到内存中的列表中,只需将单元格复制到文本文件中,然后使用TextReader读取即可。马上就好。
List<string> ReadFile(string path)
{
TextReader tr = new StreamReader(path);
string line;
List<string> lines = new List<string>();
while((line=tr.ReadLine())!=null)
{
//if this was a CSV, you could string.split(',') here
lines.add(line);
}
return lines;
}
我也面临着同样的问题,我在办公室开发中心阅读:
http://social.msdn.microsoft.com/forums/office/en us/418ada31 - 8748 - 48 - d2 - 858 b - d177326daa76/export - - excel开放- xml - sdk - vs - microsoftofficeinteropexcel?forum=oxmlsdk
你有两个选择来操作Excel文件:
- Microsoft.Office.Interop。使用Excel的Excel。应用程序作为代码执行的附加层
- 开放的XML SDK,允许开发人员直接使用关闭的文件
两者之间没有太大的区别,但是在您的情况下,性能是一个问题,您应该使用Open XML SDK,它可能会快一点,并且在处理之前不需要花那么多时间打开大文件。正如你可以在上面的链接中看到的,我引用:
不支持用于自动化目的的Office。Office应用程序的设计不是为了在没有人类监督的情况下运行,并且有一个令人讨厌的"挂起"趋势这个链接提供了一个学习开放XML SDK的良好开端:http://msdn.microsoft.com/en-us/library/office/gg575571.aspx