如何在 asp.net 核心项目中获取用于读取 excel 的 OleDb

How to get OleDb for reading excel in asp.net core project

有什么方法可以读取 ASP.NET Core 中的 excel 数据(基于 .Net Core 构建)?我无法在我的 .net 核心项目的 project.json 中引用 OleDB。还有其他方法吗?

你今天真的需要 OleDB 来阅读 Excel 吗?在我看来,OleDB 有点过时了。有一些开源库可以处理 Excel 文件,这些文件更易于使用并提供很大的灵活性。

ClosedXML (https://closedxml.codeplex.com/) 就是这样一个库。它有据可查,并允许读取和写入具有自定义单元格样式格式的 Excel 文件。

我也使用 OleDB 来读取非常大的 Excel 文件,它可以工作,但存在某些问题,以下是其中一些问题:

  1. 您将需要安装有时难以配置的 MS ACE OLEDB 提供程序。
  2. 您将不得不阅读 Excel 个文件,而关闭 XML 您可以通过 id/address.
  3. 随机访问 rows/cells
  4. OleDB 使用 Windows 注册表可配置设置来检查行数(默认为 8)以确定整个列的数据类型,有时会出现问题,因为数据类型确定不正确. ClosedXML 允许您为任何单元格设置特定的数据类型。

我不是封闭的XML开发者,所以这不是广告。正如我提到的,我已经在我的项目中使用(并将继续使用)OleDB 和 ClosedXML。使用 OleDB,我能够逐行或使用 SQL 服务器 "SELECT * FROM OPENROWSET(...)" 读取非常大的 Excel 文件(例如 400-800K+ 行)。此外 SQL 服务器可以使用相同的 ACE 提供程序直接写入 Excel 文件,它也适用于非常大的文件。

但是,ClosedXML 我曾用于 reading/writing 相对较小的文件,但它们使用了很多自定义格式。因此,如果您开始一个新项目,我建议您放弃 OleDB。

ClosedXML 的 唯一限制 是它仅支持压缩 XML Excel 文件,即 Excel 版本 2007+。您可以在上面提到的 ClosedXML 网站上找到许多示例,它们将帮助您入门。

让我知道这是否有帮助。谢谢

andrews所示,建议使用第三方库,尤其是在处理格式化时。 ClosedXML 的替代方法是 EPPlus。对于我的大部分项目,我都使用 ClosedXML,但我不得不切换到 EPPlus,因为它支持图表。

对于ASP.NET核心,可以使用EPPlus.Core。我在 ASP.NET Core 2.0 控制台应用程序中进行了快速测试,它似乎运行良好:

var newFile = new FileInfo("some file.xlsx");
using (ExcelPackage xlPackage = new ExcelPackage(newFile))
{
   var ws = xlPackage.Workbook.Worksheets.Add("etc");
   ws.Cells[1, 1].Value = "test";

   // do work here 
   xlPackage.Save();
}