181

在我们使用 C# 编写的 ASP.NET 应用程序之一中,我们获取某个数据集合(SubSonic 集合)并将其导出到 Excel。我们还想以特定格式导入 Excel 文件。我正在寻找可以用于此目的的库。

要求:

  • Excel 2007 文件(Excel 2003 是否支持超过 64k 行?我需要的不止这些。)
  • 不需要服务器上的 Excel
  • 采用类型化的集合,如果可以,尝试将数字字段作为数字放入 Excel 中。
  • 适用于大文件(100k 到 10M) - 足够快。
  • 导出 GUID 时不会崩溃!
  • 不花一大笔钱(没有像 aspose 这样的企业库)。免费总是很棒,但可以是一个商业图书馆。

你推荐什么图书馆?您是否将其用于大量数据?还有其他解决方案吗?

现在,我正在使用一个简单的工具来生成稍后由 Excel 加载的 HTML,但是我失去了一些功能,而且当我们加载它时 Excel 会抱怨。我不需要生成图表或类似的东西,只需导出原始数据。

我正在考虑平面 CSV 文件,但 Excel 是客户要求。如果我有一个工具可以与 Excel 相互转换,我可以直接使用 CSV。鉴于 Excel 2007 是一种基于 xml(和压缩)的文件格式,我猜这种库应该很容易找到。但是,对我来说最重要的是您的评论和意见。


编辑:具有讽刺意味的是,在我看来,按照投票最多的答案,最好的 Excel 导入和导出库根本没有导出。并非所有情况都如此,但它适用于我的情况。XLS 文件仅支持 64k 行。XLSX 最多支持 1M。我尝试过的免费库的性能很差(当你有 200k 行时加载一行需要一秒钟)。我没有尝试过付费的,因为我觉得当您需要的只是快速的 XLSX<->CSV 转换程序时,它们提供的价值被高估了。

4

20 回答 20

41

如果只是因为您对代码有最大的控制权,我将投入使用平面 csv 文件。只需确保您读取行并一次处理它们(将文档读取到最后并拆分会占用您所有的内存 - 与写入相同,将其流出)。

是的,用户必须先在 Excel 中保存为 CSV,然后才能处理它,但也许可以通过培训和在页面上提供明确的说明来克服这个限制?

最后,当您导出给客户时,如果您将 mime 类型设置为 text/csv,Excel 通常会映射到该类型,因此在用户看来它是“一个 Excel 文件”。

于 2009-01-14T23:34:23.583 回答
41

自从我最初的回答以来,我发现了Open XML SDK 。它为电子表格对象提供强类型类,除其他外,而且似乎相当容易使用。我将在我的一个项目中将其用于报告。唉,2.0 版应该要到 2009 年底或 2010 年才能发布。

于 2009-02-11T04:16:56.313 回答
35

在 LGPL 下免费用于商业项目的 ExcelPackage 的最后一个版本是https://www.nuget.org/packages/EPPlus/4.5.3.3

如果您需要最新最好的商业许可证,可在此处获得:https ://epplussoftware.com/en/LicenseOverview/

我仍在与导出到 excel 功能作斗争,因为我的应用程序应该将一些数据导出到 excel-template 2007

这个项目对我来说似乎很好,开发人员对错误和问题非常敏感。

于 2010-04-28T05:54:33.700 回答
18

我一直在使用ClosedXML,效果很好!

ClosedXML 使开发人员可以更轻松地创建 Excel 2007/2010 文件。它提供了一种很好的面向对象的方式来操作文件(类似于 VBA),而无需处理 XML 文档的麻烦。它可以被任何 .NET 语言使用,例如 C# 和 Visual Basic (VB)。

于 2011-11-07T13:31:45.370 回答
14

SpreadsheetGear for .NET读取和写入 CSV / XLS / XLSX 并执行更多操作。

您可以在此处查看带有 C# 和 VB 源代码的实时 ASP.NET 示例,并在此处下载免费试用版。

当然,我认为 SpreadsheetGear 是在 ASP.NET 中导入/导出 Excel 工作簿的最佳库 - 但我有偏见。您可以在此页面的右侧看到我们的一些客户所说的话。

免责声明:我拥有 SpreadsheetGear LLC

于 2009-08-29T18:26:39.100 回答
13

NPOI For Excel 2003 开源 http://www.leniel.net/2009/07/creating-excel-spreadsheets-xls-xlsx-c.html

于 2010-02-24T08:35:23.537 回答
5

我过去使用过Flexcel,它很棒。但这更多地用于以编程方式创建和更新 Excel 工作表。

于 2009-01-14T20:33:33.840 回答
5

CSV 导出简单、易于实施且速度快。不过,有一个潜在的问题值得注意。Excel(截至 2007 年)不保留 CSV 文件中的前导零。这将混淆邮政编码、产品 ID 和其他包含数值的文本数据。有一个技巧可以使 Excel 正确导入值(如果我没记错的话,使用带 = 符号的分隔符和前缀值,例如 ..,="02052",...)。如果您的用户将使用 CSV 执行后处理任务,他们需要注意他们需要将格式更改为 XLS,而不是将文件保存回 CSV。如果他们这样做,前导零将永远丢失。

于 2009-01-31T04:26:42.197 回答
4

多年来,我一直为此使用JExcel,这是一个出色的开源 Java 项目。通过使用 J# 编译它,它也支持 .NET,而且我在这个版本中也取得了巨大的成功。但是,最近我需要将代码迁移到本机 .NET 以支持 64 位 IIS 应用程序,我在该应用程序中创建 Excel 输出。不会加载 32 位 J# 版本。

CSharpJExcel 的代码是 LGPL,目前在页面上可用,同时我们准备在 JExcel SourceForge 站点上部署它。它将与 VS2005 或 VS2008 一起编译。原始 JExcel 文档中的示例将完好无损地转移到 .NET 版本。

希望对这里的人有所帮助。

于 2010-03-17T19:02:10.390 回答
3

我已经使用 excel jetcell 很长时间了,我真的可以推荐它。 http://www.devtriogroup.com/exceljetcell

  • 商业产品
  • Excel 文件 XLS 和 XLSX
  • 基于纯网络中的自己的引擎。
于 2011-04-13T07:20:13.747 回答
3

以下站点演示了如何将 DataTable、DataSet 或 List<> 导出到“正确的”Excel 2007 .xlsx 文件(而不是导出 .csv 文件并让 Excel 打开它)。

它使用 OpenXML 库,因此您无需在服务器上安装 Excel。

Mikes 知识库 - ExportToExcel

免费提供所有源代码以及演示应用程序。

添加到您自己的应用程序非常容易,您只需调用一个函数,传入 Excel 文件名和您的数据源:

DataSet ds = CreateSampleData();
string excelFilename = "C:\\Sample.xlsx";
CreateExcelFile.CreateExcelDocument(ds, excelFilename);

希望这可以帮助。

于 2011-12-01T12:25:15.303 回答
2

检查ExcelPackage项目,它使用 Excel 2007 的 Office Open XML 文件格式,它是轻量级和开源的......

于 2009-01-14T20:24:15.510 回答
2

您可以使用Microsoft.Jet.OLEDB.4.0

于 2009-05-28T17:17:47.230 回答
2

我已经尝试过 CSharpJExcel 并且不会推荐它,至少在有一些可用文档之前不会推荐。与开发人员的评论相反,它不是一个直接的本地端口。

于 2010-10-22T01:26:11.383 回答
2

我知道这已经很晚了,但我不得不从xPortTools.Net回答xPorter(写作)和xlReader(阅读)。我们测试了很多库,但在性能方面没有任何东西可以接近(我在这里谈论的是在几秒钟内写入数百万行)。不能对这些产品说足够多的好话!

于 2011-06-03T00:08:15.900 回答
1

Yogesh Jagota 在 CodeProject 上有一篇非常好的文章和库:

Excel XML 导入导出库

我用它来将数据从 SQL 查询和其他数据源导出到 Excel - 对我来说效果很好。

干杯

于 2009-01-14T20:40:24.760 回答
1

我们刚刚确定了类似的需求。我认为考虑用户体验很重要。

我们几乎走上了同样的道路:

  1. 在电子表格文件中准备/工作
  2. 保存存档
  3. 导入文件
  4. 处理系统中的数据

... 工作流程

Add-in Express允许您在 Excel 中创建一个按钮,而无需使用 VSTO 进行繁琐的操作。那么工作流程就变成了:

  1. 在电子表格文件中准备/工作
  2. 导入文件(使用Excel中的按钮)
  3. 处理系统中的数据

让按钮后面的代码使用“本机”Excel API(通过 Add-in Express)并直接推送到收件人系统。对于开发人员或用户,您无法获得更加透明的信息。值得考虑。

于 2011-01-26T09:46:38.093 回答
1

你可以试试下面的库,它很简单,它只是微软 Open XML SDK 的一个轻量级包装器(你甚至可以重用辅助 Excel 文件中的格式、样式甚至整个工作表): http: //officehelper.codeplex.com

于 2012-02-24T16:21:04.430 回答
0

Spreadsheetgear 是我们发现并正在使用的最好的商业图书馆。我们公司做了很多高级的 excel 导入和导出,Spreadsheetgear 支持很多高级的 excel 功能,远远超出了简单的 CSV 所能做的任何事情,而且速度很快。它不是免费的,也不是很便宜,但值得,因为支持非常好。如果您遇到问题,开发人员实际上会回复您。

于 2010-07-20T16:35:18.213 回答
0

apache POI java库怎么样。我没有将它用于 Excel,但确实将它用于 Word 2007。

于 2010-10-22T01:30:17.287 回答