我即将在ASP.NET应用程序(VB.NET代码后台)中添加一个部分,它将允许用户将数据以Excel文件的形式返回给他们,我将根据数据库数据生成该文件。虽然有几种方法可以做到这一点,但每种方法都有自己的缺点。您将如何返回数据?我正在寻找一个尽可能干净和直接的东西。
发布于 2008-09-30 15:42:34
这是一个围绕SpreadML的免费包装器--它工作得很好。
发布于 2008-09-30 14:47:59
根据给出的答案,以及与同事的协商,似乎最好的解决方案是生成XML文件或HTML表,并将其作为附件下推。我的同事建议的一个更改是,数据(即HTML表)可以直接写入响应对象,从而消除了写出文件的需要,这可能会因为权限问题、I/O争用而麻烦,并确保发生计划的清除。
这是一段代码..。我还没有检查过这一点,也没有提供所有被调用的代码,但我认为它很好地代表了这个想法。
Dim uiTable As HtmlTable = GetUiTable(groupedSumData)
Response.Clear()
Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader("Content-Disposition", String.Format("inline; filename=OSSummery{0:ddmmssf}.xls", DateTime.Now))
Dim writer As New System.IO.StringWriter()
Dim htmlWriter As New HtmlTextWriter(writer)
uiTable.RenderControl(htmlWriter)
Response.Write(writer.ToString)
Response.End()
发布于 2008-09-29 19:55:00
由于Excel能够理解HTML,因此您可以将数据作为HTML表写出到一个扩展名为.xls的临时文件中,获取该文件的FileInfo,然后使用
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + fi.Name);
Response.AddHeader("Content-Length", fi.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.WriteFile(fi.FullName);
Response.End();
如果要避免使用临时文件,可以写入内存中的流,然后将字节写回,而不是使用WriteFile
如果省略了content-length头,您可以直接写回html,但这并不是在所有浏览器中都能正常工作。
https://stackoverflow.com/questions/150339
复制相似问题