我必须将数据从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类型,则可能导致浏览器尝试执行它。

09-27 08:47