通过c#web服务将大量数据从sql server传输到Excel文件
所以我试图从存储过程(200k rows +)中将结果从ASP.NET中导入到Excel文件中,但有一些困难。我不认为csv是一个选项,因为客户希望数字格式正确。我已经尝试了三个第三方Excel库,但都有这么多的数据,并且使用了千兆字节的内存。通过c#web服务将大量数据从sql server传输到Excel文件
我写了一些代码来生成一个Excel XML文件,它运行速度非常快,但文件超过300megs。如果我打开并保存为本地Excel文件,它会将其降至30megs。目前,我的最佳解决方案是在服务器上压缩这个xml文件,将其压缩到7megs,但用户仍然会解压缩一个巨大的文件。理想情况下,我想找到一个第三方Excel库,可以在不杀死服务器的情况下编写具有200,000多行的本机Excel文件,有什么想法?
我最终自己生成了一个xlsx,事实证明这个格式非常简单
这是一个非常快速的POC,我写了3列255个字符200,000次(600,000个单元格)。最终文件在我的机器上以4.85MB进入。
string ExportFile = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Test.xlsx");
string DSN = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES\";", ExportFile);
using (System.Data.OleDb.OleDbConnection Con = new System.Data.OleDb.OleDbConnection(DSN))
{
Con.Open();
using (System.Data.OleDb.OleDbCommand Com = new System.Data.OleDb.OleDbCommand())
{
Com.Connection = Con;
Com.CommandText = "CREATE TABLE [TestSheet] (A1 varChar(255), B1 varChar(255), C1 varChar(255))";
Com.ExecuteNonQuery();
string A1 = new string('A', 255);
string B1 = new string('B', 255);
string C1 = new string('C', 255);
Com.CommandText = string.Format("INSERT INTO [TestSheet] (A1, B1, C1) VALUES ('{0}', '{1}', '{2}')", A1, B1, C1);
for (var i = 1; i <= 200000; i++)
{
Com.ExecuteNonQuery();
}
}
Con.Close();
}
在服务器上我不能肯定所有什么需要,但你可能必须安装此:
感谢这看起来像它有潜力。当我在机器上运行你的代码时,我只能生成多达8,000行左右的行,再给我一个空白的xls。如果我减少可以产生更多的弦的长度,那么有什么想法会发生什么? – nzyme 2011-02-23 15:06:54
你能给我发送它生成的文件吗?我的电子邮件地址在我的档案中。 – 2011-02-23 15:56:59
您正在写什么版本的Excel? 'xls'或'xlsx'? – 2011-02-23 13:49:49
您是否尝试过使用Excel原生COM API? [链接](http://support.microsoft.com/kb/302084) – 2011-02-23 13:50:13
只要它在Excel 2007中以xls或xlsx打开,文件格式并不重要。还没有尝试COM API,因为我认为需要在服务器上安装Excel? (不是一个选项) – nzyme 2011-02-23 13:58:55