如何阅读XLSX(Excel)?

Tom*_*ski 21 .net c# excel

我从.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));
}
Run Code Online (Sandbox Code Playgroud)

但如果因失败而失败connectionString.所以我更新了支持.xlsx的行:

var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 12.0;", fileName);
Run Code Online (Sandbox Code Playgroud)

但我得到:

"Microsoft.ACE.OLEDB.12.0"提供程序未在本地计算机上注册.

(问题在于,我无法在我的远程测试机器上安装新软件,所以我无法修复它并需要找到其他解决方案.)

我还需要确保导入的数据将以某种简单的方式存储(我是初学程序员),让我遍历它,即创建具有行数据的对象.

我检查的其他方法:

评论:似乎可能对我有用,但不支持未知维度的Excel文件(行和列的随机数).

注释:不支持来自不同行的设置列名称(在我的一些Excel文件中,在4-6行中有注释,然后是下面的标题行和数据).

评论:与上述相同的问题.

评论:下载的包重量超过60MB,需要我在系统上安装,这在我的情况下是不可能的.无论如何,人们评论说它限制在150行.

同时我会尝试检查https://code.google.com/p/linqtoexcel/,但欢迎所有其他想法!

编辑:刚刚检查了LinqToExcel,同样的问题如上:

"Microsoft.ACE.OLEDB.12.0"提供程序未在本地计算机上注册.

EDIT2:最终,这个解决方案似乎解决了我的问题:

/sf/answers/1334568651/

Arg*_*a C 30

如果您正在从Excel文件中读取数据,则可以使用EPPlusNuGet包,并使用以下代码

//using OfficeOpenXml;
using (ExcelPackage xlPackage = new ExcelPackage(new FileInfo(@"C:\YourDirectory\sample.xlsx")))
{
    var myWorksheet = xlPackage.Workbook.Worksheets.First(); //select sheet here
    var totalRows = myWorksheet.Dimension.End.Row;
    var totalColumns = myWorksheet.Dimension.End.Column;

    var sb = new StringBuilder(); //this is your data
    for (int rowNum = 1; rowNum <= totalRows; rowNum++) //select starting row here
    {
        var row = myWorksheet.Cells[rowNum, 1, rowNum, totalColumns].Select(c => c.Value == null ? string.Empty : c.Value.ToString());
        sb.AppendLine(string.Join(",", row));
    }
}
Run Code Online (Sandbox Code Playgroud)

  • EPPlus已获得GNU GPL v3许可。 (3认同)
  • EPPLUS 现在拥有商业用途的特定许可证(Polyform Noncommercial 1.0.0)。 (3认同)