将DataTable导出到Excel文件的最佳方法是什么?

时间:2010-07-14 02:45:51

标签: .net excel data-binding interop ms-office

据我所知,有三种方法可以做到这一点:

  • 第一种方法是使用COM Interop创建Excel文件,然后遍历所有单元格以读取和写入数据。创建的文件似乎有效(真正的.XLS文件),但似乎必须安装才能使用这种方式
  • 第二种方法是编写文件头(CSS样式),然后迭代所有单元格。这种方式不需要安装Excel,但创建的文件可能无效(实际上是HTML文件)
  • 第三种方法是将DataTable填充到DataGrid中,然后将其渲染为HTML文件,然后将其重命名为.xls扩展名。

第三种方式似乎最简单,但我不知道是否有更好的存档方式?如果不是,这三种方式中最好的是什么?

非常感谢你。

3 个答案:

答案 0 :(得分:1)

第四种方法是使用OleDbConnection并使用标准ADO.NET将.NET应用程序连接到Excel。

几年前我不得不做类似的事情,这篇文章非常有帮助。

http://davidhayden.com/blog/dave/archive/2006/05/26/2973.aspx

这种方法有很多古怪的东西(主要是引用表和范围),但它最终只是一个ADO.NET实现,最终看起来非常像一个普通的ADO.NET项目。

希望这有帮助!

答案 1 :(得分:1)

最简单的方法:CSV。对每个DataRow的每个值只需ToString()并将其放到文件中。您还可以删除列名作为文件中的第一行。 CSV文件很容易导入excel。

我的替代方案是使用Codeplex上的众多项目之一导出到xslx。我玩过ExcelPackageSimple OOXML,两者(IIRC)都运行良好。

您可以通过在Codeplex上搜索Excel或OOXML找到更多信息。

答案 2 :(得分:0)

要小心写入CSV,因为Excel会自动转换数据类型。例如,0001将被转换为数字1。

另一种选择是使用DataTable.WriteXML(filename)并将文件名设置为something.xls

这不是二进制XLS文件,但也应该使用Excel打开。

BTW:如果您需要格式化,HTML表格方法会更好,对于大型表格,这两种方法都会非常慢。