我有一个约有50列,超过6000行的Excel表。
我找到以下解决方案来读取数据: https://coderwall.com/p/app3ya/read-excel-file-in-c
它使用Microsoft.Office.Interop.Excel读取文件。
可悲的是,它真的很慢。读取仅包含50行的文件大约需要一分钟。我从未加载完6000行文件。
然后我考虑使用csv,但是该表包含和;所以这不是一个选择。
有人可以建议另一种方法吗?
答案 0 :(得分:2)
除了我的评论-
这是我用来从Excel文件读取并插入表的方法。您将需要:
using Microsoft.Office.Interop;
using语句,以及为项目添加正确的Microsoft.Office.Interop.Excel
引用。
方法:
public DataTable ReadExcel(string fileName, string TableName)
{
DataTable dt = new DataTable();
OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 8.0\"");
OleDbCommand cmd = new OleDbCommand("SELECT * FROM " + TableName, conn);
try
{
conn.Open();
OleDbDataReader reader = cmd.ExecuteReader();
while (!reader.IsClosed)
{
dt.Load(reader);
}
}
finally
{
conn.Close();
}
return dt;
}
说明:
fileName
将是您要读取数据表单的Excel文件的文件路径。
TableName
将是您要从中读取数据的Excel工作表名称。
之所以这样编写,是因为C#会读取它并将Excel文件像数据库一样对待,这里的sheets
代替了tables
。
您可能需要更改OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 8.0\"");
您可以在此处找到正确/正确的Provider
:https://www.connectionstrings.com/excel/
答案 1 :(得分:0)
如果您只打算读取Excel文件,建议您使用ExcelDataReader而不是互操作性。