Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C#将数据写入Excel文件的最佳和最快的方法是什么?_C#_Excel_Oledb - Fatal编程技术网

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

使用C#将数据写入Excel文件的最佳和最快的方法是什么?,c#,excel,oledb,C#,Excel,Oledb,我正在尝试使用OLEDB(无需自动化)写入excel文件。 我有大约500行数据,这些数据是我从其他应用程序中获取的,然后使用“插入到…”查询逐个写入Excel文件。 我确信从其他应用程序读取数据时不会有延迟。我查过了。 在大约3分钟内写入excel文件500行所需的总时间。 这太过分了。这肯定是因为文件写入操作 最好的办法是什么? 我应该使用其他写作技巧吗? 我应该试试自动化技术吗 此链接显示了许多技术,但不确定使用哪种技术。编写Excel最基本(也是最复杂)的方法是按照BIFF格式创建二进

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

最好的办法是什么? 我应该使用其他写作技巧吗? 我应该试试自动化技术吗

此链接显示了许多技术,但不确定使用哪种技术。

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

关于将数据集导出到Excel文件,还有其他CodeProject示例。记住的人会创建一个遵循Excel XML格式的XML文件。它还以每个单元为基础进行写入。看看:

我推荐了图书馆,但它不是免费的:(


但是,如果您想要Office Open XML格式,您可以使用Excel,它已经提供了以XML格式读取/写入数据所需的一切。


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

如果只是da的话ta,CSV文件导入可以工作。使用代码创建文件,并使用自动化使Excel导入文件

更新:写完这篇文章后,我喜欢上了我不知道的内容。

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


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

如果您可以将COM转换为excel,则可以通过COM直接从excel查询,或创建一个数据数组,并将其直接放入与数组大小相等的范围内。尽管excel不适合于小型COM调用,但它在很少的大型COM调用中工作得很好:)

DataSet ds=新数据集();
da.填充(ds);
int width=ds.Tables[0].Columns.Count;
int height=ds.Tables[0].Rows.Count;
对象[,]retList=新对象[高度、宽度];
对于(int i=0;i

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

我一直在使用该库成功地编写excel文件。但这一点也不便宜。

您是希望一次性转储到Excel,还是希望保持连接并多次将数据推送到Excel

如果您希望不止一次地将数据推送到Excel,那么您应该研究制作RTD服务器,我已经使用过很多次了,它们都很有效

如果您希望一次性使用Excel,则需要使用COM


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

这个库是免费的,创建xls文件非常快,如果您没有安装MS Office,它也可以工作。

我们使用。

我们使用糖浆细胞。它很容易使用,速度快,没有明显的问题


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

我有一个包含许多电子表格的.xls文件。我得在其中一张纸上写字。您能告诉我如何使用自动化导入csv文件,然后将数据复制到所需的电子表格中吗?codeproject.com和其他地方都有示例。这应该会有帮助:这很快,有时最好使用excel中的文本导入来打开csv,但是,excel会将一些文本项格式化为科学数字,只给出一个您控制有限的自动excel行为示例。您能解释代码中的mWs和目的地吗?。
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;