我正在搜索如何在ASP.NET MVC应用程序中从SQL Server生成XLS(XLSX)文件。
现在我使用EPPlus执行SQL查询,结果由此库保存到xlsx。 在这种情况下,我有性能问题。如果我有很多数据,那么生成时间会更长(平均150行,大约10秒,而且很长时间)。
第一个想法是执行查询,它返回XML,然后通过xslt模板转换为xls,但是这里我有通过Excel打开的问题(格式和扩展名不匹配)。
第二个想法是从DB返回XSL(或XSLX)的执行查询,但我不知道如何做,因为文件保存在服务器上,我不知道如何发送给客户端下载。
第三个想法你有没有遇到类似问题的人,你可以帮助我吗?
感谢任何想法。
// EDIT 以下是我的代码的简短示例:
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;
答案 0 :(得分:1)
您可以使用简单的INSERT INTO执行此操作。
像INSERT INTO OPENROWSET
('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=[path];','SELECT * FROM [table]')
其中[path]是所需目录,SELECT语句应该是自我解释。
有关OPENROWSET的更多信息,请查看Microsoft documentation
答案 1 :(得分:0)
由于您更新的问题与原始问题不同,我正在撰写新答案:
代码的问题是嵌套循环。这样,您就可以访问数千个文件。
而是尝试生成例如一个全部值的数组,然后使用Excel.Range
一次更新/设置整个数组。
下次请先使用搜索功能。关于缓慢的excel插入,有很多(已回答)问题。