如何在不引入对Office的依赖的情况下将原始数据导出到Excel?

我们的产品具有将其本机格式(本质上是XML文件)导出到Excel以供查看/编辑的要求。 然而,这需要依赖Excel(或Office)本身来生产我们的产品 – 这是我们不想要的。

我们所做的是将数据从原始格式导出到可以在Excel中打开的csv文件。 如果用户select一个选项来打开生成的报告,我们(尝试)启动Excel应用程序来打开它(当然,它需要Excel已经存在于客户端系统上)。

大部分数据是平坦的logging列表。

有更好的格式(甚至更好的方法)来处理这个要求吗? 这是很多产品的通用要求 – 你如何处理?

Excel版本(包括2007和以前的版本)都具有原生的XML格式。 显然,2007年默认是XML,早期版本可以保存为XML。 这个SO问题处理这个问题。 我猜想一点点检查会给出一个想法。 我不知道旧版本的XSD / DTD是否存在,但有点创意的谷歌search可能会产生一些东西。

正如其他人指出的那样,生成Excel XML文件是相当容易的。 你可以用多种方式来做到这一点。 例如:

  1. 通过创build模板Excel XML文档,然后使用XML DOM将数据填充到模板中,或者
  2. 将模板Excel XML转换为XSLT,然后将您的专有XML作为input传递给XSLT。

我正在使用ExcelPackage在我的一个项目中创build电子表格。 工程相当不错,但是(至less是我使用的版本)在样式和计算方面有点有限。

ExcelPackage允许您创build本机上与2k7兼容的OOXML文档(.xslx文件),但是您可以从MS 下载以前版本的Office 的插件 。

我们使用客户端的Excel对象(基于COM的代码)或CSV文件(通常在服务器端,但也可以在客户端使用)导出我们的数据。 而且我们允许从简单的html格式的网格复制数据,什么可以粘贴到Excel没有问题。 对于一个客户,我们甚至不得不将数据[从sql存储过程]导出为类似于csv的制表符分隔格式,但命名文件如xxxxx.xls – 这样excel以比csv文件更正确的方式打开该文件。 丑陋的黑客,但运作良好。

CSV是最兼容的格式(不依赖于外部应用程序或库),但客户不喜欢它。 也许我们需要join一些XLS导出代码,这样所有的用户都会高兴:)

如果.csv格式不够,可以在Excel中创build一个模板,并使用一点VBA代码导入CSV并适当地格式化。 这样,您的应用程序只关心生成.CSV,并将为每个导出使用相同的.XLS。

如果你小心,你应该能够得到这个与大多数版本的Excel无缝工作。

如果您正在使用Java,请从APACHE签出POI项目。 http://poi.apache.org/

简单,漂亮,完整,强大。

我们从服务器上的Office开始,但这不是很好。 我们不得不杀死那些悬而未决的进程,并且有相当一部分的performance下滑。 我们考虑把它放在不同的机器上,但是在尝试和使用Aspose(商业版)之后并没有打扰。 我们没有大量的同时在线的用户,但是复杂的文档。 简单的可以用csv处理。

我现在已经使用FlexCel Studio进行了几个项目。 这是非常实用和快速的。 100%的托pipe代码,没有依赖关系。 听起来就像你会使用“报告”function,它允许你定义一个空的报告模板在Excel中,然后通过数据表和volia,它填充您的数据。

TMS软件

我们使用OleDB和Interop的组合。 我们发现互操作速度更快,使用的内存也更less,但是对于兼容性问题,特别是在使用不同的Office语言安装时,这是一个痛苦。 OleDb的优点是您不需要在客户机上安装Excel。 Interop和OleDb都支持每个工作簿使用csv无法完成的多个工作表(表格)。

如果您使用C#或VB.Net,并且您的数据位于DataSet,DataTable或List <>中,则可以使用我的免费“导出到Excel”类。

它使用免费的Microsoft OpenXML库(因此您不需要在服务器上安装Excel),并且只需一行代码即可将数据导出到“真实”.xlsx文件中,例如:

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

所有的源代码都在下面的页面上提供,还有一个演示项目,完全免费(和popup窗口!)

http://mikesknowledgebase.com/pages/CSharp/ExportToExcel.htm

希望这可以帮助 !