从数据库导出Excel文件

时间:2014-06-28 13:11:30

标签: sql-server xml excel tsql asp.net-mvc-4

我正在搜索如何在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;

2 个答案:

答案 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插入,有很多(已回答)问题。