首页 > 解决方案 > 使用 C# 将大 Excel 表存储到数组中

问题描述

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

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

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

可悲的是,它真的很慢。读取一个只有 50 行的文件大约需要一分钟。我从来没有完成加载 6000 行文件。

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

谁能建议另一种方法?

标签: c#excel

解决方案


除了我的评论——

这是我用来从 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/


推荐阅读