我必须将数据从jqdrid导出到excel文件。我可以在我的javaascript代码中以字符串格式准备数据,如下所示
"1\tRamu Kaka\tShanta Ben\tN Modi\tSome clerk\tCustomer\tECP\tFunding\t80.00\tTBill\tMinus\t1,111\t\t\t01-01-1900\t01-01-1900\t\t\tSubmitted\t01-01-1900\tYes\t\t;2\tRamu Kaka\tShanta Ben\tN Modi\tSome clerk\tCustomer\tECP\tFunding\t80.00\tTBill\tMinus\t1,111\t\t\t01-01-1900\t01-01-1900\t\t\tSubmitted\t01-01-1900\tYes\t\t;....."
并能够在我的MVC控制器中获得相同的效果,如下所示。
@RequestMapping(value = "/exportToXLS", method = RequestMethod.GET)
public ModelAndView exportToXL(@RequestParam("data") String data,
HttpServletRequest request, HttpServletResponse response,
Model model) throws Exception {
response.setHeader("Cache-Control", "public");
response.setHeader("Pragma", "public");
response.setHeader("Expires", "0");
response.setHeader("Content-Length", Integer.toString(data.length()));
String dateString = dtFormat.format(new Date());
response.setHeader("Content-Disposition","attachment; filename=\"FileName-" +dateString+ ".xls\";");
response.setContentType("application/vnd.ms-excel");
Workbook workbook = myExcelUtility.exportTasks(Arrays.asList(data.split(";")));
workbook.write(response.getOutputStream());
response.flushBuffer();//<--- here
return null;
}
在我的myExcelUtility.exportTasks(Arrays.asList(data.split(“;”))));中我正在通过填充所有cellItem,样式,值等来准备工作簿的方法
到这里为止一切都很好。
但是当我做response.flushBuffer();的时候,我的应用程序页面被导航到某个URL并说
“Internet Explorer无法显示该网页”
那里的URL URL是
http://:5080 / myApp / exportToXLS?data = 1 \ tRamu Kaka \ tShanta Ben \ tN Modi \ t某些业务员\ tCustomer \ tECP \ tFunding \ t80.00 \ tTBill \ tMinus \ t1,111 \ t \ t \ t01 -01-1900 \ t01-01-1900 \ t \ t \ t已提交\ t01-01-1900 \ t是\ t \ t; 2 \ t拉穆·卡卡\ t桑塔·本\ tN莫迪\ t一些业务员\ t客户\ tECP \ t资金\ t80 .00 \ tTBill \ tMinus \ t1,111 \ t \ t \ t01-01-1900 \ t01-01-1900 \ t \ t \ t已提交\ t01-01-1900 \ t是\ t \ t; .....
我的服务器控制台中没有错误日志。
创建Workbook不会有任何错误,因为我也尝试过
Workbook workbook = new HSSFWorkbook();
workbook.write(response.getOutputStream());
response.flushBuffer();
但这也没有用。
您能否帮助我找出我在哪里以及在哪里犯任何错误。
最佳答案
您的内容处置在结尾处包含分号(;)
基于this link我认为您应该更改:
response.setHeader("Content-Disposition","attachment; filename=\"FileName-" +dateString+ ".xls\";");
它应该是
response.setHeader("Content-Disposition","attachment; filename=\"FileName-" +dateString+ ".xls\"");
另外,根据IE实例的年龄,您可能需要更改content-type
古代浏览器还需要以下内容(如今不需要,但是
一个愚蠢的解决方案可能值得做):
Content-Type header should be before Content-Disposition.
Content-Type header should refer to an unknown MIME type (at least until the older browsers go away).
可能不再需要此功能,但是值得尝试。如果标题是已知的mime类型,则可能导致浏览器尝试执行它。