【发布时间】:2015-10-23 12:21:55
【问题描述】:
我在读取 .xlsx (Excel) 文件时遇到问题。我尝试使用:
var fileName = @"C:\automated_testing\ProductsUploadTemplate-2015-10-22.xlsx";
var connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", fileName);
var adapter = new OleDbDataAdapter("SELECT * FROM [workSheetNameHere$]", connectionString);
var ds = new DataSet();
adapter.Fill(ds, "XLSData");
DataTable data = ds.Tables["XLSData"];
// ... Loop over all rows.
StringBuilder sb = new StringBuilder();
foreach (DataRow row in data.Rows)
{
sb.AppendLine(string.Join(",", row.ItemArray));
}
但如果由于connectionString 而失败。所以我更新了这条线以支持.xlsx:
var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 12.0;", fileName);
但我明白了:
“Microsoft.ACE.OLEDB.12.0”提供程序未在本地计算机上注册。
(这里的问题是,我无法在我的远程测试机器上安装新软件,所以我无法修复它,需要寻找其他解决方案。)
我还需要确保导入的数据将以某种简单的方式存储(我是初级程序员),以便我可以遍历它,即使用行的数据创建对象。
我检查的其他方法:
评论:似乎可能对我有用,但不支持未知尺寸(随机行数和列数)的 Excel 文件。
评论:不支持设置列名来自与第一行不同的行(在我的一些 Excel 文件中,前 4-6 行有 cmets,然后是标题行和下面的数据)。
评论:和上面的问题一样。
评论:下载的包重量超过 60MB,需要我在系统上安装,这在我的情况下是不可能的。无论如何,人们评论说它被限制为 150 行。
同时我会尝试检查https://code.google.com/p/linqtoexcel/,但所有其他想法都非常受欢迎!
编辑:刚刚检查了 LinqToExcel,与上述问题相同:
“Microsoft.ACE.OLEDB.12.0”提供程序未在本地计算机上注册。
EDIT2:最终,这个解决方案似乎解决了我的问题:
【问题讨论】:
-
epplus epplus.codeplex.com
-
@Fredou:它不会创建电子表格吗?我需要从一个阅读。你有这方面的例子吗?
-
它也可以读取excel文件,查看这个stackoverflow问题stackoverflow.com/questions/11685204/…或者这个博客条目blog.fryhard.com/archive/2010/10/28/…
-
@Fredou:现在我看到我也提供了那个链接。它可能会起作用,但我确实需要知道在使用它之前我在 xlsx 文件中填写了多少个单元格,因为它不会逐行进行,但需要提供详细的单元格地址才能读取它的值.