[英]What is the best and fastest way to write into Excel file using C#?
我正在尝试使用OLEDB写入excel文件(没有自动化)。 我从其他应用程序获得了大约500行数据,然后使用“INSERT INTO ..”查询逐个写入Excel文件。 我确信从其他应用程序读取数据没有延迟。 我查了一下。 在大约3分钟内写入500行的excel文件所花费的总时间。 这太多了。 这绝对是因为文件写入操作。
什么是使这种速度快的最佳方法? 我应该使用其他一些技巧写作吗? 我应该尝试自动化技术吗?
http://support.microsoft.com/kb/306023此链接显示了许多技术,但不确定使用哪种技术。
如果你可以将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的示例
Excel已经提供了以XML格式读取/写入数据所需的一切。
我偶尔使用过SpreadsheetML格式,它对我来说效果很好。 使用它,您可以写出一个xml格式的文档,并使用.xls扩展名命名。 大多数excel功能都可用。 Microsoft的参考文档就在这里 。 Google提供各种语言的教程,如Rails , PHP 。 Excel Hacks这本书也谈到了它。
如果它只是数据,则可以使用CSV文件导入。 在代码中创建文件并使用自动化使Excel导入文件。
更新:写完这篇文章后,我喜欢@ MicTech的建议 ,我不知道。
我们使用SpreadsheetGear 。
我推荐了FlexCel库,但它不是免费的:(
但是,如果您想要Office Open XML格式,可以使用http://excelpackage.codeplex.com/
我们使用aspose细胞。 它非常易于使用,速度快,没有明显的问题。
http://www.aspose.com/categories/.net-components/aspose.cells-for-.net/default.aspx
快速而肮脏的方法是创建一个包含表格数据的HTML表格,然后用.xls扩展名保存。 它工作,并将在Excel中打开。
那么,编写Excel的最基本(也是最复杂)的方法是按照BIFF格式创建二进制文件。 使用BIFF格式,您需要概述Excel文件的结构。 它非常复杂,但您可以基于每个单元控制写入内容。
将DataSet导出到Excel文件中还有其他CodeProject示例。 请记住,创建一个遵循Excel XML格式的XML文件。 它还基于每个单元写入。 看着:
http://www.codeproject.com/KB/office/ExportDataSetToExcel.aspx
“写入”Excel的另一种方法是将数据创建为HTML页面并加载它。 Excel实际上可以读取HTML。 通过html执行此操作的一个好处是,您可以使用CSV格式化数据。
但是,如果您只导出简单数据(小文本字段和数字),请使用CSV。
我一直在使用Aspose.Cells库,非常成功地编写Excel文件。 它远非便宜。
这个库是免费的,并且非常快速地创建xls文件,如果你没有安装MS Office,它也可以工作。 http://code.google.com/p/excellibrary/downloads/list
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.