Java 使用XSSFWorkbook和AbstractExcelView
据我所知,AbstractExcelView类函数buildExcelDocument不支持XSSFWorkbook() 我试图通过实现buildExcelDocument功能来解决这个问题,如下所示:Java 使用XSSFWorkbook和AbstractExcelView,java,spring,apache-poi,Java,Spring,Apache Poi,据我所知,AbstractExcelView类函数buildExcelDocument不支持XSSFWorkbook() 我试图通过实现buildExcelDocument功能来解决这个问题,如下所示: Workbook workbook = null; protected void buildExcelDocument(Map model, HSSFWorkbook wbook, HttpServletRequest request, HttpServletRes
Workbook workbook = null;
protected void buildExcelDocument(Map model,
HSSFWorkbook wbook,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
if(request.getRequestURL().toString().contains("xlsx")){
workbook = new XSSFWorkbook();
workbook.createSheet();
excelVersion = "xlsx"; //Used to determine response
}else{
workbook = wbook;
}
buildBothExcelDocument(model,workbook,request,response);
}
这里,我的buildBothExcelDocument函数将使用ApacheSS用户模型生成和创建excel版本、HSSFWorkbook和XSSForkbook。创建工作簿后,我会创建一个标题,提示用户保存或打开excel文件:
if(excelVersion.equals("xlsx")){
response.setHeader("Pragma", "public");
response.setHeader("Cache-Control", "max-age=0");
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment; filename=test.xlsx");
}else{
response.setHeader("Pragma", "public");
response.setHeader("Cache-Control", "max-age=0");
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=\"test.xls\"");
}
使用HSSF工作簿时,上述所有代码均有效。使用Microsoft Excel 2003或Microsoft Excel 2007正确创建、下载和打开工作簿的数据
当我尝试创建.xlsx文件时,打开时出现错误,说明“Excel无法打开文件'test.xlsx',因为文件格式或文件扩展名无效。请验证文件是否已损坏,以及文件扩展名是否与文件格式匹配”。这让我相信Spring的某个地方损坏了我的文件。我的问题是:
1-我的响应内容类型和标题是否正确?(来源:)
2-是否有任何方法可以使用Spring和AbstractExcelView创建xlsx excel文件
3-Spring是否支持XSSF工作簿
一些补充说明:
ApachePOI版本-v3.9
我在创建标题时尝试了以下操作:
response.setHeader("Content-Disposition", "attachment; filename=\"test.xlsx\"");
及
所有这些都会产生相同的失败结果
我使用以下链接帮助将我的旧HSSF代码转换为使用SS usermodel。我在没有Spring干扰的情况下测试了这个转换过程,并且能够成功地创建xls和xlsx文件。谢谢你的帮助。我知道POI的.Net实现有一种写入流的方法。如果您将工作簿接口写入流,并将流作为带有参数化内容和标题的字节数组返回,它应该可以工作--我在.Net MVC控制器中遇到了一个类似的问题,没有正确地提供响应。请确保您正确地提供了内容类型 (“应用程序/vnd.openxmlformats of cedocument.spreadsheetml.sheet”;以与MS Office 2007 OnWord兼容的.xlsx格式生成excel
(“应用程序/vnd.ms excel”;->以.xls格式生成excel您似乎试图将
XSSFWorkbook
分配给HSSFWorkbook
对象,该对象永远不会工作,只需要工作簿
。否则,如果将输出直接写入文件,Excel可以读取吗?i、 这是一个生成问题,还是一个服务问题?我可能只是想接近这一点,但我不知道我在哪里将XSSF工作簿分配给HSSF工作簿。我创建了一个名为工作簿的工作簿,并根据buildExcelDocument函数中的情况创建一个新的XSSF工作簿,并将其分配给工作簿或将工作簿设置为作为参数传入的HSSFWorkbook。然后,函数buildBothExcelDocument使用所有usermodel功能,这样它就可以处理传入的工作簿参数。很有可能我没有忽略什么。
response.setHeader("Content-Disposition", "attachment; filename='test.xlsx'");