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

4
我有如下数据。
AAAAAA
BBBBBB
CCCCCC
DDDDDD
EEEEEE

现在页面上有一个按钮,当我点击该按钮时,浏览器会下载一个包含上述数据的Excel文件,并停留在当前页面。是否有简单的方法可以实现这一功能?数据非常简单,只有一列,而且不是很大。
最好的问候,

1
可能是 https://dev59.com/FHVC5IYBdhLWcg3w51lv 的重复问题。 - Franci Penov
5个回答

7
您可以直接将数据写入响应流中。将MIME类型设置为Excel并将数据写出为:

  • HTML
  • CSV
  • Spreadsheet 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()

抱歉使用vb.net,这是我手头有的 - 格式不太好。 - James Westgate

0

除了在服务器上自动化Excel(不建议这样做)之外,最简单的方法是使用字符串生成器创建所需的输出,然后将其写入HttpResponse,并将内容类型设置为"text/csv",设置适当的标头信息。

虽然这不是严格意义上的Excel文档,但如果用户已安装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();

你确定先调用了“ClearContent”吗? - R Bremner

0

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

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


0

除了上述解决方案之外,另一种选择是钩入Excel COM对象并使用其API生成电子表格。

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


0

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

非常简单,可以正确地处理 Excel 格式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接