从 ASP.NET 将数据导出为 Excel 文件

问题描述 投票:0回答:5

我有如下数据

AAAAAA
BBBBBB
CCCCCC
DDDDDD
EEEEEE

现在页面上有一个按钮,当我单击该按钮时,浏览器会下载包含上述数据的 Excel 文件,并停留在当前页面。有什么简单的方法可以做到吗?数据非常简单。只有一列,而且不大。

致以诚挚的问候,

c# asp.net excel
5个回答
7
投票

您可以将数据直接写到响应流中。将 mime 类型设置为 excel 并将数据写出为:

  • HTML
  • CSV
  • 电子表格 XML
  • OOXML (.xlsx)

如果您想使用 OOXML,可以使用诸如 Simple OOXML 之类的库。请注意,这是 .xlsx 格式。

以下代码设置 .xls 文件所需的标头

'Send response with content type to display as MS Excel
context.Response.Clear()
context.Response.Buffer = True

context.Response.AddHeader("content-disposition", String.Format( "attachment;filename={0}", fileName))
context.Response.ContentEncoding = Encoding.UTF8

context.Response.Cache.SetCacheability(HttpCacheability.Private)
context.Response.ContentType = "application/vnd.ms-excel"

'Write to response
context.Response.Write("csv,data,goes,here")

context.Response.End()

0
投票

是的,您可以将信息导出为 csv 文件,并为其指定 Excel 文件扩展名。 Excel 将识别它不是本机 Excel 格式,并允许导入并显示警告消息。对于下载,您可以在 Internet 上搜索具有 ASP.NET 中的自定义 MIME 类型的常规文件下载。

由于出现警告消息,上述方法不是首选方法。您还可以使用库来生成本机 Excel 文件。我在过去的项目中成功使用了 Aspose.Cells。


0
投票

缺少服务器上的自动化 excel(不推荐),最简单的方法是使用字符串生成器创建所需的输出,然后将其写入 HttpResponse,将内容类型设置为“text/csv”,设置适当的标头信息。

虽然这不是严格意义上的 Excel 文档,但如果安装了该文件,下载该文件的用户将被提示在 Excel 或任何其他基于电子表格的编辑器中打开它。

以下片段应该可以帮助您继续:

string docName  = "MyExcelDoc"
StringBuilder sb = new StringBuilder();
sb.AppendLine("AAAAAA");
sb.AppendLine("BBBBBB");

context.Response.ClearContent();
context.Response.ContentType = "text/csv";
context.Response.AddHeader("content-disposition", "attachment; filename=" + docName + ".csv");
context.Response.Write(sb.ToString());            
context.Response.Flush();

0
投票

上述解决方案的替代方案是挂钩 Excel COM 对象并使用其 API 生成电子表格。

这意味着您必须在服务器上安装 excel,因此其他解决方案可能会更好。


0
投票

NPOI是一个开源项目,可以帮助您读取/写入xls、doc、ppt文件。

非常简单并给出正确的Excel格式。

© www.soinside.com 2019 - 2024. All rights reserved.