导入和导出Excel - 最好的库是什么?

184
在我们的ASP.NET应用程序中,我们采用了一种特定的数据集合(SubSonic集合)并将其导出到Excel中。我们还想以特定格式导入Excel文件。我正在寻找可用于此目的的库。
要求:
- Excel 2007文件(Excel 2003是否支持超过64k行?我需要更多。) - 不需要在服务器上安装Excel - 接受一个类型化的集合,并尝试将数字字段作为数字放入Excel中(如果可以的话) - 在处理大文件时效率高(100k至10M) - 导出GUID时不会崩溃! - 不要花费太多钱(没有像aspose这样的企业库)。免费总是好的,但也可以是商业库。
您推荐哪个库?您是否已经使用它处理过大量数据?是否有其他解决方案?
目前,我正在使用一个简单的工具生成HTML,稍后由Excel加载,但我失去了一些功能,而且Excel在加载时会出现问题。我不需要生成图表或其他任何东西,只需要导出原始数据。
我考虑使用平面CSV文件,但Excel是客户需求。如果我有一个转换为和从Excel的工具,我可以直接使用CSV。鉴于Excel 2007是基于XML的(和压缩的)文件格式,我猜这种库应该很容易找到。然而,对我来说最重要的是您的评论和意见。
编辑:具有最高选票答案的讽刺是,在我看来,最好的Excel导入/导出库不需要导出。这并非对所有情况都适用,但对于我的情况是这样。XLS文件仅支持64k行。XLSX支持高达1M。我试过的免费库性能很差(当你有20万行时,每秒加载一行)。我没有尝试付费版,因为我觉得它们在价值方面过高,当你只需要一个快速的XLSX < - > CSV转换例程时。

18
“鉴于Excel 2007是基于XML(和压缩)的文件格式,我猜想这种库应该很容易找到”——哈!这就像说“Excel 97是基于字节的,所以这种库应该很容易找到”。XML并不意味着简单,而OOXML是如何使XML变得不明确和复杂难懂的典型案例。 :-) - Ken
实际上,你在做那个假设时并不完全正确。有一些工具可用于使用C#.NET构建格式良好的OOXML文档,至少对于XLSX来说非常容易。 - Anonymous Type
3
我已经创建了一个网站方案,为像这样的问题提供一个不在 Stack Overflow 的官方家园。它叫做 Code Recommendations。加入并立即提问,帮助实现这个想法! - daviewales
Spire.xls怎么样?Pro版只需800美元。您可以获得所有的转换以及Excel导入或导出功能。http://www.e-iceblue.com/Introduce/excel-for-net-introduce.html#.VsM4xObNKtY - DotNet Programmer
GemBox.Spreadsheet 是另一个值得一试的解决方案,速度超快,同时拥有免费和专业版本。此外,专业版价格相当便宜,没有像大多数其他软件那样存在部署时的隐藏糟糕成本。 - NixonUposseen
20个回答

3
以下网站演示了如何将 DataTable、DataSet 或 List<> 导出到“正确”的 Excel 2007 .xlsx 文件中(而不是导出 .csv 文件,再让 Excel 打开它)。
它使用 OpenXML 库,因此您无需在服务器上安装 Excel。 Mikes Knowledge Base - ExportToExcel 所有源代码都免费提供,还有一个演示应用程序。
将它添加到您自己的应用程序非常容易,您只需要调用一个函数,传递一个 Excel 文件名和数据源即可。
DataSet ds = CreateSampleData();
string excelFilename = "C:\\Sample.xlsx";
CreateExcelFile.CreateExcelDocument(ds, excelFilename);

希望这可以帮到你。

1
此链接已失效。 - Lynn

2
我知道现在有点晚了,但我还是觉得有必要回答来自xPorter(写入)和xlReader(读取)的问题,这两个工具来自xPortTools.Net。我们测试了很多库,但在性能方面没有一个库可以与它们相比(我在这里说的是每秒写入数百万行数据)。对于这些产品,我无法说出足够的好话!

2

请查看ExcelPackage项目,它使用Excel 2007的Office Open XML文件格式,具有轻量级和开源的特点...


1
看起来不错,但有一个评论说对于大文件(我的情况)不好。 - Jason Kealey
1
有趣 - 它的许可证是GPL而不是LGPL。因此,它必须在GPL应用程序中使用。(另外,不幸的是开发似乎已经停止了。) - Jason Kealey
1
我尝试了ExcelPackage,但不得不放弃它 - 当您尝试在单元格中放置单引号(')时,它会失败。 - Igor Brejc

2

我尝试了CSharpJExcel,但不推荐使用,至少在有一些文档可用之前不要使用。与开发人员的评论相反,它并不是一个纯本地移植。


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

1
我的一个要求是服务器上不要运行Excel。 - Jason Kealey
2
我不认为它正在运行! - Soner Gönül
2
不需要MS Office就可以使用“Microsoft.Jet.OLEDB.4.0”(用于xls)和“Microsoft.ACE.OLEDB.12.0”(用于xlsx)。你只需要使用驱动程序,因此在服务器上无法运行Excel。@Jason Kealey - Sanjay Goswami
1
我用这个来处理XLS文件(不是最初的需求),为了完整性... 有一些重要问题:(1)它只支持32位,所以你需要设置IIS允许它。 (2)导出速度非常慢。 (3)行和列的限制文档记录不清楚。 (4)它坚持在导入列时进行“类型嗅探”,除非你有注册表访问权限,否则通常会出错。 - philw

1

我们刚刚发现了类似的需求。我认为考虑用户体验非常重要。

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

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

... 工作流程

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

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

使按钮背后的代码使用“本地”Excel API(通过 Add-in Express),并直接推送到接收系统中。对于开发人员或用户来说,这是最透明的方式。值得考虑。


1

CodeProject上有一篇非常好的文章和库,作者是Yogesh Jagota:

Excel XML导入导出库

我已经使用它将SQL查询和其他数据源中的数据导出到Excel中 - 对我来说完全有效。

干杯


1
有趣,但需要 XML 文件。无法读/写 xls 或 xlsx 文件。 - Jason Kealey

1
你可以尝试使用以下库,它非常容易上手,只是一个轻量级的 Microsoft Open XML SDK 包装器(你甚至可以从次要的 Excel 文件中重用格式、样式甚至整个工作表): http://officehelper.codeplex.com

最近发布了该库的新版本。 - aron.sinoai

0

Spreadsheetgear是我们发现并正在使用的最好的商业库。我们的公司进行了大量的高级Excel导入和导出,并且Spreadsheetgear支持许多比简单的CSV更先进的Excel功能,并且速度很快。虽然它不是免费或非常便宜,但由于支持非常出色,因此它是值得的。如果您遇到问题,开发人员实际上会回复您。


0

关于Apache POI Java库怎么样?我没有用它来处理Excel,但是我用过它来处理Word 2007。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接