【发布时间】:2012-11-23 10:19:22
【问题描述】:
在 Excel 中识别和打开 CSV 输出时遇到问题。在我的 Web 应用程序中,我有一个 java servlet,它将搜索结果返回给用户。搜索结果由 Apache Solr 服务器提供。 GUI 前端有一个选项,允许用户以“CSV”格式请求搜索结果。如果选择此选项,则通过添加“wt=csv”参数对 Solr 重新运行查询。然后 java 过滤器添加标题以将结果作为 CSV 格式文本返回。但它不能正常工作。
- 在 IE(8.0 版)中,系统提示我“打开”或“保存”文件。如果我选择“打开”;它只是在屏幕上转储 CSV 格式的文本,而不是在 Excel 中打开它。如果我选择“保存”;我收到一条错误消息 - “无法打开此 Internet 站点。请求的站点不可用或找不到。”
- 也在 Firefox (ver 10.0.9) 中;系统提示我打开或保存文件。但是对于打开 CSV 文件;默认选项是记事本,甚至没有列出 Excel。如果我点击“保存”,它会下载 CSV 文件,我可以在 Excel 中打开它,它可以被 Excel 正确识别。
我尝试了各种标题和组合 –
//((HttpServletResponse)response).setHeader("Content-Type", "application/octet; charset=utf-8");
((HttpServletResponse)response).setHeader("Content-Type", "text/csv");
//((HttpServletResponse)response).setHeader("Content-Type", "application/vnd.ms-excel");
//((HttpServletResponse)response).setHeader("Cache-Control", "private, private,max-age=0,must-revalidate");
//((HttpServletResponse)response).setHeader("Content-Encoding", "gzip");
//((HttpServletResponse)response).setHeader("Content-Encoding", "binary");
((HttpServletResponse)response).setHeader("Content-Disposition", "attachment; filename=Download.CSV");
//((HttpServletResponse)response).setHeader("Content-Disposition", "inline; filename=Download.CSV;");
但他们似乎都没有工作。我使用 Firefox 检查发回的标头,我看到以下内容 -
内容配置:附件;文件名=下载.CSV
Content-Type:text/plain;charset=UTF-8
服务器:码头(7.x.y-SNAPSHOT)
传输编码:分块
变化:接受编码
即使 content-type 被指定为 csv 或 excel;当它到达浏览器时,它被解释为文本/纯文本,我认为这就是问题所在。不确定我应该设置什么标头或编码?有什么建议?谢谢。
【问题讨论】:
-
.csv 扩展名是否与您计算机上的 Excel 相关联?如果没有,IE 和 Firefox 可能不会知道它需要用 Excel 打开。