将数据导出到Excel电子表格

时间:2012-06-07 13:33:54

标签: c# excel interop

我将开发一个通用工具包,用于根据数据库数据编写excel文件。 我之前使用过几种方法:

1)创建CSV文件
Excel将打开它并格式化数据,每个值进入一个单元格,每行为一行 缺点:默认情况下,excel并不总是打开文件扩展名 它似乎在非常大的数据源上“切断”了。从内存中,在excel“忽略”文件的其余部分之前,它会达到大约65,000行。

2)生成XML电子表格
http://msdn.microsoft.com/en-us/library/bb226687(v=office.11).aspx
缺点:打开'你试图打开的文件**的格式与文件扩展名指定的格式不同'时出错。它确实很好,但它没有激发信心 使编写SQL-to-XML变得尴尬。

我刚才简要介绍过使用excel Interop 方法。我确信在尝试从没有安装excel / office的服务器运行代码时遇到了问题。这将几乎总是如此

通常,代码将通过网页或Silverlight WCF服务运行(如果这会产生影响)。
并且通过电子邮件发送给用户,或者也可以选择直接打开该文件并允许他们保存。
包括标题/颜色/公式将是一个奖金

目前他们只是复制/粘贴数据 但是对于大型数据集,它很容易出现故障,或者真的很慢

任何人都会给我最好的想法如何去做吧

3 个答案:

答案 0 :(得分:1)

您可以使用商业产品(例如Aspose.Cells)在服务器上的C#中生成Excel电子表格,而无需安装Office。如果你想看看对象模型的样子,他们有一些sample code在aspx.cs页面中生成一个电子表格。

不幸的是,如果你有多个开发人员从源代码​​控制中获取代码并构建它,他们的定价方案真的很尴尬;他们正式认为您是同一个团队的一员,并且需要为每个开发人员提供许可证(即使您是唯一直接使用该代码的程序员)。

答案 1 :(得分:1)

由于CSV存在大量行后切断的问题,因此该方法已经解决。

使用Interop很棘手。除了确保在服务器上安装了Excel和PIA之外,还需要在单个线程中运行Excel代码(使用某种排队机制)。否则,您将开始遇到问题。

除了令人困惑的消息之外,XML实际上似乎是最可靠的解决方案。如果您可以在评论中回答我的问题,我们也可以为您提供帮助。

PS。如果您可以在生成Excel工作表(您应该)之前确定行数,则可以使用以下两种格式之一来交付结果:CSV用于小文件,XML用于大型,权衡是令人困惑的消息(提供它不会消失)。根据超过CSV阈值的文件百分比,这可能是可接受的折衷方案。

答案 2 :(得分:1)

我建议使用EPPlus,将DataTable转换为Excel文件非常容易,并且允许大量样式选项甚至数据验证。您甚至不需要在服务器上安装Excel。