6

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

什么是最好的方法来做到这一点?我应该使用其他一些写作技巧吗?我应该尝试自动化技术吗?

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

4

12 回答 12

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 的示例

于 2009-05-15T22:47:56.717 回答
3

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

我有时会使用SpreadsheetML格式,它对我来说效果很好。使用它,您可以写出一个 xml 格式的文档,并使用 .xls 扩展名对其进行命名。大多数excel功能都可用。Microsoft 的参考文档在此处。谷歌各种语言的教程,如RailsPHPExcel Hacks一书也谈到了这一点。

于 2009-05-15T22:36:22.530 回答
2

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

更新:写完这篇文章后,我喜欢@MicTech 的我不知道的建议。

于 2009-05-15T22:37:24.587 回答
2

我们使用SpreadsheetGear

于 2009-05-18T12:13:27.427 回答
1

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

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

于 2009-05-15T22:35:57.510 回答
1

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

如果您希望多次将数据推送到 Excel,您应该研究制作 RTD 服务器,我已经多次使用它们并且它们可以使用RTD 服务器

如果您希望一次性推送到 Excel,则需要使用 COM。使用 COM 和 C#

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

于 2009-05-15T23:18:13.447 回答
0

嗯,编写 Excel 的最基本(但也是最复杂)的方法是创建一个遵循 BIFF 格式的二进制文件。对于 BIFF 格式,您需要概述 Excel 文件的结构。它非常复杂,但是您可以在每个单元格的基础上控制要写的内容。

还有其他关于将 DataSet 导出到 Excel 文件的 CodeProject 示例。考虑创建一个遵循 Excel XML 格式的 XML 文件。它还以每个单元格为基础进行写入。看着:

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

于 2009-05-15T22:34:53.220 回答
0

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

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

于 2009-05-15T22:46:35.080 回答
0

我一直在使用Aspose.Cells库来编写 Excel 文件取得了巨大成功。不过远不便宜。

于 2009-05-15T22:50:28.753 回答
0

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

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

于 2009-10-19T13:22:59.547 回答
0

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

于 2009-05-16T05:31:38.010 回答
0

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

于 2009-11-04T14:13:04.500 回答