从数据库导出Excel文件

我正在寻找如何在ASP.NET MVC应用程序中从SQL Server生成XLS(XLSX)文件。

现在我使用EPPlus执行SQL查询,并将结果保存到xlsx库中。 在这种情况下,我有性能问题。 如果我有这么多的数据,世代时间更长(平均150秒左右,大约10秒,时间也长)。

第一个想法是执行查询,返回XML,然后通过xslt模板转换为xls,但在这里,我通过Excel打开问题(格式和扩展名不匹配)。

第二个想法是执行查询,从数据库返回XSL(或XSLX),但我不知道如何做,因为文件保存在服务器上,我不知道如何发送到客户端下载。

第三个想法你有没有人遇到类似的问题,你能帮我吗?

感谢您的任何想法。

//编辑这里是我的代码的简短的例子:

int row = 0; foreach(var obj1 in objList1) { WriteObj1(ref row, obj1); var objList2 = GetObj2(obj1.Id); foreach(var obj2 in objList2) { WriteObj2(ref row, obj2); var objList3 = GetObj3(obj2.Id); foreach(var obj3 in objList3) { WriteObj3(ref row, obj3); var objList4 = GetObj4(obj3.Id); foreach(var obj4 in objList4) { WriteObj4(ref row, obj4); var objList5 = GetObj5(obj4.Id); foreach(var obj5 in objList5) { WriteObj5(ref row, obj5); } } } } } 

内部写入方法是这样的代码:

 // create header in Excel ... workSheet.Cells[row, column++].Value = someValue; 

由于你更新的问题与原来的问题不同,我正在写一个新的答案:

你的代码的问题是嵌套循环。 这样你有数以千计的访问该文件。 而是尝试生成例如一个具有所有值的数组,然后使用Excel.Range来一次更新/设置整个数组。

下一次请先使用searchfunction。 有几十个(回答)有关缓慢的excel插入的问题。

你可以用一个简单的INSERT INTO来做到这一点。

INSERT INTO OPENROWSET ('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=[path];','SELECT * FROM [table]')

其中[path]是所需的目录,SELECT语句应该是自我解释的。

有关OPENROWSET的更多信息,可以查看Microsoft文档