使用C#写入Excel文件的最佳和最快的方法是什么?

时间:2009-05-15 22:24:55

标签: c# excel oledb

我正在尝试使用OLEDB写入excel文件(没有自动化)。 我从其他应用程序获得了大约500行数据,然后使用“INSERT INTO ..”查询逐个写入Excel文件。 我确信从其他应用程序读取数据没有延迟。我查了一下。 在大约3分钟内写入500行的excel文件所花费的总时间。 这太多了。这肯定是因为文件写入操作。

最快的方法是什么? 我应该使用其他一些技巧写作吗? 我应该尝试一种自动化技术吗?

http://support.microsoft.com/kb/306023 此链接显示了许多技术,但不确定使用哪种技术。

12 个答案:

答案 0 :(得分:7)

如果您可以将COM转换为Excel,则可以通过COM直接从excel查询,或创建数据数组并将其直接放入等于数组大小的范围内。尽管excel对于小型COM调用并不好用,但它很少用于大量的COM调用:)

DataSet ds = new DataSet();
          da.Fill(ds);
          int width = ds.Tables[0].Columns.Count;
          int height = ds.Tables[0].Rows.Count;
          object[,] retList = new object[height, width];
          for (int i = 0; i < height; i++)
          {
            DataRow r = ds.Tables[0].Rows[i];
            for (int j = 0; j < width; j++)
              retList[i, j] = r.ItemArray[j];
          }
          Excel.Range range = mWs.get_Range(destination, mWs.Cells[destination.Row + height - 1, destination.Column + width - 1]);
          range.set_Value(Missing.Value, retList);
          System.Runtime.InteropServices.Marshal.ReleaseComObject(range);
          range = null;

这是一个获取数据并在一次COM调用中将其作为数组插入excel的示例

答案 1 :(得分:3)

Excel已经提供了以XML格式读取/写入数据所需的一切。

我偶尔使用SpreadsheetML格式,对我来说效果很好。使用它,您可以写出一个xml格式的文档,并使用.xls扩展名命名。大多数excel功能都可用。 Microsoft的参考文档为here。 Google提供各种语言的教程,例如RailsPHP。这本书Excel Hacks也谈到了它。

答案 2 :(得分:2)

如果只是数据,则可以使用CSV文件导入。在代码中创建文件并使用自动化使Excel导入文件。

更新:写完这篇文章后,我喜欢@MicTech's suggestion,我不知道。

答案 3 :(得分:2)

我们使用SpreadsheetGear

答案 4 :(得分:1)

我推荐FlexCel库,但它不是免费的:(

但是如果您想要Office Open XML格式,可以使用http://excelpackage.codeplex.com/

答案 5 :(得分:1)

您是在寻找一次性转储到Excel还是保持连接并多次将数据推送到Excel?

如果您想要多次将数据推送到Excel,您应该调查制作RTD服务器,我已多次使用它们并且它们可以正常工作RTD Server

如果您正在寻找一次性推送到Excel,则需要使用COM。 Using COM and C#

C#版本4对托管COM进行了一些很好的改进,在使用Excel时不再需要主互操作程序集。 C#4尚未投入生产,但如果它适合您,您可以下载它的测试版。

答案 6 :(得分:0)

嗯,最基本(也是最复杂)的Excel编写方式是按照BIFF格式创建二进制文件。使用BIFF格式,您需要概述Excel文件的结构。它非常复杂,但您可以基于每个单元控制写入内容。

将DataSet导出到Excel文件中还有其他CodeProject示例。请记住,创建一个遵循Excel XML格式的XML文件。它还基于每个单元写入。看看:

http://www.codeproject.com/KB/office/ExportDataSetToExcel.aspx

答案 7 :(得分:0)

“写入”Excel的另一种方法是将数据创建为HTML页面并加载它。 Excel实际上可以读取HTML。通过html执行此操作的一个好处是,您可以使用CSV格式化数据格式。

但是,如果您只是导出简单数据(小文本字段和数字),请使用CSV。

答案 8 :(得分:0)

我一直在使用Aspose.Cells库非常成功地编写Excel文件。但它远非便宜。

答案 9 :(得分:0)

这个库是免费的,并且非常快速地创建xls文件,如果你没有安装MS Office,它也可以工作。 http://code.google.com/p/excellibrary/downloads/list

答案 10 :(得分:0)

我们使用aspose细胞。它非常易于使用,快速,没有明显的问题。

http://www.aspose.com/categories/.net-components/aspose.cells-for-.net/default.aspx

答案 11 :(得分:0)

快速而又脏的方法是创建一个包含表格数据的HTML表格,然后用.xls扩展名保存。它工作正常,将在Excel中打开。