关于使用POI导出时excel版本问题的bug解决
2017-05-27 14:04
453 查看
使用POI文档。实例化对象时代码如下:
Workbook wb = new HSSFWorkbook(new FileInputStream(new File("D:\\tFACTORY.xls")));
但是D盘的excel文件格式是.xlsx格式的,导致出现了如下的错误:
type Exception report
message Request processing failed; nested exception is org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be
in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)
description The server encountered an internal error that prevented it from fulfilling this request.
exception
root cause
解决的办法如下:使用正则表达式,判断实例化对象时候进行一个选择
String fileName = "D:\\tFACTORY.xlsx";
if (fileName.matches("^.+\\.(?i)((xls)|(xlsx))$")) {
boolean is03Excel = fileName.matches("^.+\\.(?i)(xls)$");
FileInputStream inputStream = new FileInputStream(fileName);
Workbook wb = is03Excel ? new HSSFWorkbook(inputStream) : new XSSFWorkbook(inputStream);
。。。。。。
}
Workbook wb = new HSSFWorkbook(new FileInputStream(new File("D:\\tFACTORY.xls")));
但是D盘的excel文件格式是.xlsx格式的,导致出现了如下的错误:
HTTP Status 500 - Request processing failed; nested exception is org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2
Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)
type Exception reportmessage Request processing failed; nested exception is org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be
in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)
description The server encountered an internal error that prevented it from fulfilling this request.
exception
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:948) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838) javax.servlet.http.HttpServlet.service(HttpServlet.java:650) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812) javax.servlet.http.HttpServlet.service(HttpServlet.java:731) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
root cause
org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF) org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:131) org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:104) org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:138) org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:322) org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:303) org.jk.controller.cargo.contract.OutProductController.print(OutProductController.java:50) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) java.lang.reflect.Method.invoke(Unknown Source) org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219) org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686) org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838) javax.servlet.http.HttpServlet.service(HttpServlet.java:650) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812) javax.servlet.http.HttpServlet.service(HttpServlet.java:731) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
解决的办法如下:使用正则表达式,判断实例化对象时候进行一个选择
String fileName = "D:\\tFACTORY.xlsx";
if (fileName.matches("^.+\\.(?i)((xls)|(xlsx))$")) {
boolean is03Excel = fileName.matches("^.+\\.(?i)(xls)$");
FileInputStream inputStream = new FileInputStream(fileName);
Workbook wb = is03Excel ? new HSSFWorkbook(inputStream) : new XSSFWorkbook(inputStream);
。。。。。。
}
相关文章推荐
- 使用poi导出excel后,关于出现#NAME? 的问题,已解决
- 使用poi做excel导出时解决以文本格式存储的数字问题
- 使用poi做excel导出时解决以文本格式存储的数字问题
- 使用poi做excel导出时解决以文本格式存储的数字问题
- poi工具导出excel乱码问题的解决过程
- jxls--使用模版导出excel,单元格无法自动计算问题解决
- ASP.NET AJAX Advance Tips & Tricks (10) 解决使用AJAX Extender时的页面导出(Word/Excel)问题(Extender control 'XXX' is not a registered extender control)
- POI导出Excel文件图片丢失问题解决
- 关于Android开发中导出jar包后的资源使用问题解决
- 【poi】解决java导出excel 海量数据内存溢出问题
- 关于使用POI实现excel导出
- sl3中的DataGrid中的数据导出到Excel中 使用csv格式 解决中文是乱码的问题
- 使用POI导出excel,完美兼容2003及2007以上版本,购物车原理
- 关于GridView导出Excel的一些问题(采用Ajax出现的的问题及解决方法)
- 解决poi导出excel中文列宽问题
- 解决poi导出excel中文列宽问题
- 转载+整理:在部署时使用Excel .NET运行库导出Excel遇到问题及解决办法
- 使用poi低版本(poi-3.0.1)导出Excel整理
- 解决poi导出excel中文列宽问题
- 使用jxl实现导出Excel,解决路径和删除文件的问题