使用C#将大型Excel表存储到数组中

时间:2019-01-17 17:42:20

标签: c# excel

我有一个约有50列,超过6000行的Excel表。

我找到以下解决方案来读取数据: https://coderwall.com/p/app3ya/read-excel-file-in-c

它使用Microsoft.Office.Interop.Excel读取文件。

可悲的是,它真的很慢。读取仅包含50行的文件大约需要一分钟。我从未加载完6000行文件。

然后我考虑使用csv,但是该表包含和;所以这不是一个选择。

有人可以建议另一种方法吗?

2 个答案:

答案 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\"");

您可以在此处找到正确/正确的Providerhttps://www.connectionstrings.com/excel/

答案 1 :(得分:0)

如果您只打算读取Excel文件,建议您使用ExcelDataReader而不是互操作性。