Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用C语言将大型Excel表格存储到数组中_C#_Excel - Fatal编程技术网

C# 用C语言将大型Excel表格存储到数组中

C# 用C语言将大型Excel表格存储到数组中,c#,excel,C#,Excel,我有一个Excel表格,大约有50列,6000多行 我找到了以下读取数据的解决方案: 它使用Microsoft.Office.Interop.Excel读取文件 可悲的是,它真的很慢。读取一个只有50行的文件大约需要一分钟。我从未加载完6000行文件 然后我考虑使用csv,但表中包含,和;所以这不是一个选择 有人能推荐其他方法吗?如果您只想阅读Excel文件,我建议您不要使用interop 除了我的评论- 下面是我用来从Excel文件读取数据并将其放入表中的方法。您需要: 使用Microsof

我有一个Excel表格,大约有50列,6000多行

我找到了以下读取数据的解决方案:

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

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

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


有人能推荐其他方法吗?

如果您只想阅读Excel文件,我建议您不要使用interop

除了我的评论-

下面是我用来从Excel文件读取数据并将其放入表中的方法。您需要:

使用Microsoft.Office.Interop;使用语句,并将正确的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文件视为一个数据库,其中有表格而不是表格

您可能需要更改OleDbConnection@Provider=Microsoft.ACE.OLEDB.12.0;数据源=+文件名+;扩展属性=\Excel 8.0\


您可以在此处找到合适/正确的提供者:

您将使用哪种Excel格式?这与将Excel表存储到数组中有什么关系?为什么不将Excel文件读入数据表,然后从中进行操作呢?Tim,C是一个很好的东西。数据表将为您带来奇迹。参考:表格有多稀疏?例如,在300000个单元格中,占满的百分比是多少?所有6000行是否具有相同的形状,即在每行中,单元格是否对应于相同的列/含义。如果它非常稀疏,您可能需要使用稀疏矩阵技术。如果它是完全规则的,您可能希望将其读入类似于列表的内容,其中TypeThresentsOnErrorOfData是一个POCO类,其属性与列匹配。如果您使用与列布局匹配的类型将数据读入列表,您会更高兴。我不知道你是否可以混合搭配ExcelDataReader和Dapper,但如果可以的话,这将是一个非常干净的解决方案。你可以在你的项目中巧妙地运用。Dapper相当快。我不熟悉导入和使用这样的代码。你能给我一个谷歌关键词吗?如何处理这些东西?使用Nuget软件包安装程序。如果您使用的是Visual Studio,请右键单击该项目并选择Manage Nuget Packages。您可以在那里搜索ExcelDataReader并安装它。这个库最好的地方是它是独立的,不需要安装Office。谢谢,我来测试一下。此功能危险吗?->我是否应该创建该文件的临时副本?此方法所做的只是从Excel文件中读取数据,将其填充到数据表类型中,然后返回该数据表。您可以将其命名为:DataTable testTable=ReadExcelC:\TestExcel,Sheet1。如果它能让您感到更轻松,那么您完全可以在运行之前创建一个Excel测试。这个方法不写Excel,只从中读取谢谢,我知道它只读取:但即使是他们,一些系统也会打开文件读取它,如果程序崩溃,数据可能会损坏:我不知道如何使用dataTable。从互联网上我发现我可以使用:dt.Rows[rowname][columnname],但列名是什么?是否与Excel->第一行中的相同?此外,该程序将在不同的机器上运行。有没有办法通过编程方式获取提供者?请记住,数据表中的所有内容都将使用此方法捕获。因此,如果工作表中有数据之外的任何内容,它也将被导入。如果工作表上的所有内容都是数据,那么这是一种捕获数据的好方法。