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

时间:2009-01-14 20:20:09

标签: c# asp.net excel export-to-excel import-from-excel

在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转换例程时,我觉得它们的价值过高。

20 个答案:

答案 0 :(得分:40)

自从我原来的答案以来,我发现了Open XML SDK。它为电子表格对象提供了强类型类,并且似乎相当容易使用。 我打算在我的一个项目中使用它来报告。唉,版本2.0不应该在2009年底或2010年之前发布。

答案 1 :(得分:38)

如果只是因为你对代码有了最大的控制权,我会把手放进去查看csv文件。只要确保你读入行并一次处理一行(将文档读到最后并且拆分将占用你所有的内存 - 与写入相同,将其流出)。

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

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

答案 2 :(得分:34)

新版ExcelPackage就在这里 http://EPPlus.codeplex.com

由于我的应用程序应该将一些数据导出到excel-template 2007

,我仍然在使用导出到excel函数。

这个项目对我来说似乎很好,开发人员对错误和问题的反应很快。

答案 3 :(得分:17)

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

  

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

答案 4 :(得分:14)

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

您可以使用C#和VB源代码here查看实时ASP.NET示例并下载免费试用here

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

免责声明:我拥有SpreadsheetGear LLC

答案 5 :(得分:13)

答案 6 :(得分:5)

我过去曾使用Flexcel而且很棒。但这更像是以编程方式创建和更新excel工作表。

答案 7 :(得分:5)

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

答案 8 :(得分:4)

多年来,我一直使用JExcel,这是一个优秀的开源Java项目。通过使用J#编译它也可以实现.NET,并且我在这个版本中也取得了很大的成功。但是,最近我需要将代码迁移到本机.NET以支持我在其中创建Excel输出的64位IIS应用程序。无法加载32位J#版本。

CSharpJExcel的代码是LGPL,目前在this页面上可用,而我们准备在JExcel SourceForge站点上部署它。它将使用VS2005或VS2008进行编译。原始JExcel文档中的示例很好地完整地移动到.NET版本。

希望这对有人有帮助。

答案 9 :(得分:3)

我已经和excel jetcell合作了很长时间,并且可以推荐它。 http://www.devtriogroup.com/exceljetcell

  • 商业产品
  • Excel文件XLS& XLSX
  • 基于自己的纯网引擎。

答案 10 :(得分: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);

希望这有帮助。

答案 11 :(得分:2)

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

答案 12 :(得分:2)

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

答案 13 :(得分:2)

我知道这已经很晚了,但我觉得有必要从xPorter回答xlReader(写作)和xPortTools.Net(阅读)。我们测试了很多库,并且在性能方面没有任何结果(我说的是在几秒钟内写入数百万行)。不能说这些产品的好东西!

答案 14 :(得分:2)

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

答案 15 :(得分:1)

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

Excel XML Import-Export Library

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

干杯

答案 16 :(得分:1)

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

我们几乎一路走来:

  1. 准备/使用电子表格文件
  2. 保存文件
  3. 导入文件
  4. 使用系统中的数据
  5. ...工作流程

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

    1. 准备/使用电子表格文件
    2. 导入文件(使用Excel中的按钮
    3. 使用系统中的数据
    4. 让按钮后面的代码使用“本机”Excel API(通过Add-in Express)并直接推送到收件人系统。您无法让开发人员或用户更加透明。值得考虑。

答案 17 :(得分:1)

您可以尝试使用以下库,它非常简单,它只是Microsoft的Open XML SDK的一个轻量级包装器(您甚至可以重复使用二级Excel文件中的格式,样式甚至整个工作表): http://officehelper.codeplex.com

答案 18 :(得分:0)

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

答案 19 :(得分:0)

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