如何从XLSX (Excel)中读取

本文关键字:读取 Excel XLSX | 更新日期: 2023-09-27 18:18:54

我有一个问题,从。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'提供程序。

(这里的问题是,我无法在我的远程测试机上安装新软件,所以我无法修复它,需要寻找其他解决方案。)

我也需要确保导入的数据将存储在一些简单的方式(我是初学者程序员),让我通过它迭代,即创建与行数据的对象。

我检查的其他方法:

  • https://bytescout.com/products/developer/spreadsheetsdk/read-write-excel.html

注释:似乎可能为我工作,但不支持未知维度的Excel文件(随机数量的行和列)。

  • https://exceldatareader.codeplex.com/

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

  • http://blog.fryhard.com/archive/2010/10/28/reading-xlsx-files-using-c-and-epplus.aspx

注释:和上面的问题一样。

  • https://freenetexcel.codeplex.com/

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

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

编辑:刚刚检查了LinqToExcel,和上面一样的问题:

没有在本地机器上注册'Microsoft.ACE.OLEDB.12.0'提供程序。

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

https://stackoverflow.com/a/19065266/3146582

如何从XLSX (Excel)中读取

如果您是从Excel文件中读取数据,则可以使用EPPlus NuGet包,并使用以下代码:

//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));
    }
}

只有安装了MS Jet引擎(MS Access)才能使用OLE提供程序读取Excel文件。我注意到你决定使用。net互操作API,但这不是一个好主意:它需要安装MS Excel,不建议在服务器上使用自动化。

如果你不需要支持旧的(二进制)Excel格式(xls)和阅读XLSX是足够的,我建议使用EPPlus库。它为读取和写入XLSX文件提供了简单而强大的API(并且有很多示例):

var existingFile = new FileInfo(filePath);
// Open and read the XlSX file.
using (var package = new ExcelPackage(existingFile)) {
   // access worksheets, cells etc
}