C# 用C语言将大型Excel表格存储到数组中
我有一个Excel表格,大约有50列,6000多行 我找到了以下读取数据的解决方案: 它使用Microsoft.Office.Interop.Excel读取文件 可悲的是,它真的很慢。读取一个只有50行的文件大约需要一分钟。我从未加载完6000行文件 然后我考虑使用csv,但表中包含,和;所以这不是一个选择C# 用C语言将大型Excel表格存储到数组中,c#,excel,C#,Excel,我有一个Excel表格,大约有50列,6000多行 我找到了以下读取数据的解决方案: 它使用Microsoft.Office.Interop.Excel读取文件 可悲的是,它真的很慢。读取一个只有50行的文件大约需要一分钟。我从未加载完6000行文件 然后我考虑使用csv,但表中包含,和;所以这不是一个选择 有人能推荐其他方法吗?如果您只想阅读Excel文件,我建议您不要使用interop 除了我的评论- 下面是我用来从Excel文件读取数据并将其放入表中的方法。您需要: 使用Microsof
有人能推荐其他方法吗?如果您只想阅读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->第一行中的相同?此外,该程序将在不同的机器上运行。有没有办法通过编程方式获取提供者?请记住,数据表中的所有内容都将使用此方法捕获。因此,如果工作表中有数据之外的任何内容,它也将被导入。如果工作表上的所有内容都是数据,那么这是一种捕获数据的好方法。