`

poi-excel上传、下载问题总结

    博客分类:
  • poi
poi 
阅读更多
一、Excel 文件上传
0.0 功能实现
参考内容:
http://blog.csdn.net/u013871100/article/details/52901996

1.0问题描述

测试过程中,选择一个 Excel 文件上传,版本为 office 2007

1.2异常信息


Exception in thread "main" 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)
at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:128)
at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:112)
at org.apache.poi.poifs.filesystem.NPOIFSFileSystem.<init>(NPOIFSFileSystem.java:302)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:86)


1.3异常解释

代码中用HSSFSheet 进行表单获取,以及使用HSSFXXX对行、列内容进行处理
而HSSFSheet 导入时只支持2007版本而不支持其他版本

1.4问题解决
参考内容:
http://blog.csdn.net/mmm333zzz/article/details/7962377

HSSFSheet 系列进行文件的处理,只能处理2007版本以下的
XSSFSheet 系列进行文件的处理,处理2007版本


2.0问题描述

测试过程中,获取的数据总数与已经总数不一致,即数据丢失

2.1问题解决
参考内容:
http://blog.csdn.net/u013871100/article/details/52901996

row / cell 取值从0 开始


3.0问题描述
上传文件中含有手机号码,对手机号码进行格式校验时异常,检查正则无误,跟踪代码发现接收的数据变成科学计数法

3.1问题解决
参考内容:
http://blog.csdn.net/cclovett/article/details/16343615
使用BigDecimal 对数据进行转化

参考内容:
http://jingyan.baidu.com/article/0964eca27a39808285f5363c.html
将模板中手机号码的单元格格式,设置为 数字--文本

4.0问题描述
读取文本内容时,出现异常

4.1异常描述

java.lang.IllegalStateException: Cannot get a text value from a numeric cell
at org.apache.poi.xssf.usermodel.XSSFCell.typeMismatch(XSSFCell.java:994) ~[poi-ooxml-3.14.jar:3.14]
at org.apache.poi.xssf.usermodel.XSSFCell.getRichStringCellValue(XSSFCell.java:399) ~[poi-ooxml-3.14.jar:3.14]
at org.apache.poi.xssf.usermodel.XSSFCell.getStringCellValue(XSSFCell.java:351) ~[poi-ooxml-3.14.jar:3.14]


4.2异常解释
试图将Number 转换为String
4.3异常解决
参考内容:
http://blog.csdn.net/ysughw/article/details/9288307
进行格式转化

5.0问题描述
取出Map的Values集合,并当做查询参数时异常
5.1异常描述

java.util.HashMap$Values cannot be cast to java.util.Set

5.2异常解决
遍历Map,组装Value


二、文件下载

0.0功能实现
参考内容:
http://meigesir.iteye.com/blog/1539358
http://www.cnblogs.com/ungshow/archive/2009/01/12/1374491.html

1.0问题描述
无法映射访问路径

1.1代码内容
	@RequestMapping("excelModelDown")
	public void excelModelDown(

//			@RequestParam(defaultValue="",required=false)
// 添加此行注释后,请求正常映射
			HttpServletResponse  response 
			
			){
		return ;
	}
// 在实现中重新定义response 依然无法解决问题
// 取消上述@RequestParam标签即可

2.0问题描述
无法获取放到src/main/resources下的文件
2.1问题解决
resources中的文件打包时也被放在classes目录下。使用this.getClass().getClassLoader().getResource("");
读取src/main/resources 下的文件
获取文件路径 this指代当前类

3.0问题描述

放在SRC的文件为英文名称,下载的文件欲换成中文名称
但更换名称后,下载的文件变为未知文件

注:
response.addHeader("Content-Disposition", "attachment;filename=" + new String(EXCEL_MODEL_CHINESE_NAME.getBytes("gb2312"), "ISO8859-1" )+"."+ext.toLowerCase());

若文件名称不变,则设置"fileName = "+new String(currentFileName.getBytes())
若文件名称变更,setFileName 时,给出 全限定名称,文件名+.+文件类型

下载文件名称乱码问题解决
http://lj830723.iteye.com/blog/1415479

三、上传

1.MultipartFile 使用 -- 接收上传的 Excel 文件
参考内容:
http://blog.csdn.net/swingpyzf/article/details/20230865

2.上传文件时报异常

Caused by: java.lang.IllegalArgumentException: Expected MultipartHttpServletRequest: is a MultipartResolver configured?
at org.springframework.util.Assert.notNull(Assert.java:112) ~[spring-core-4.1.9.RELEASE.jar:4.1.9.RELEASE]
at org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.resolveName(RequestParamMethodArgumentResolver.java:168) ~[spring-web-4.1.9.RELEASE.jar:4.1.9.RELEASE]
at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:88) ~[spring-web-4.1.9.RELEASE.jar:4.1.9.RELEASE]
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:78) ~[spring-web-4.1.9.RELEASE.jar:4.1.9.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:162) ~[spring-web-4.1.9.RELEASE.jar:4.1.9.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:129) ~[spring-web-4.1.9.RELEASE.jar:4.1.9.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) ~[spring-webmvc-4.1.9.RELEASE.jar:4.1.9.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:775) ~[spring-webmvc-4.1.9.RELEASE.jar:4.1.9.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705) ~[spring-webmvc-4.1.9.RELEASE.jar:4.1.9.RELEASE]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) ~[spring-webmvc-4.1.9.RELEASE.jar:4.1.9.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) ~[spring-webmvc-4.1.9.RELEASE.jar:4.1.9.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) ~[spring-webmvc-4.1.9.RELEASE.jar:4.1.9.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:965) ~[spring-webmvc-4.1.9.RELEASE.jar:4.1.9.RELEASE]
... 33 common frames omitted


解决方案:
http://blog.csdn.net/jiangyu1013/article/details/60758582

3.

Expected MultipartHttpServletRequest: is a MultipartResolver configured

http://blog.csdn.net/jiangyu1013/article/details/60758582

4.接收上传文件内容为空

MultipartFile 接收上传结果为空
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
         <!-- 请求编码格式 -->  
         <property name="defaultEncoding" value="utf-8"></property>  
         <!-- 上传文件大小(单位:字节) -->  
         <property name="maxUploadSize" value="50000000"></property>  
         <!-- 缓冲区大小(单位:KB) -->  
         <property name="maxInMemorySize" value="1024"></property>  
    </bean> 
		<context:component-scan base-package="com.jrd.dams.admin">
		<context:exclude-filter type="regex"
			expression="com.jrd.dams.admin.controller.*" />
	</context:component-scan>

备注:
1.放在 scan 上,报错,数据库连接异常
appears to have started a thread named [Abandoned connection cleanup thread] but has failed to stop
2.更换位置后正常

解决方案:
http://www.cnblogs.com/songyunxinQQ529616136/p/6646070.html
接收文件名称与 HTML中上传文件名称相同

5.与File对比
// 包含文件名称及扩展名
String fileName = excelFile.getOriginalFilename();
// 只包含文件名,与File 的getFileName方法有区别
String fileName = excelFile.getFileName();

wb = new XSSFWorkbook(excelFile.toString());
XSSFWorkbook 加载 MultipartFile 时异常
http://jingyan.baidu.com/article/11c17a2c073e12f446e39d38.html
wb = new XSSFWorkbook(excelFile.getInputStream());

分享到:
评论

相关推荐

    poi-3.10.1上传组件jar包 po poi-ooxml poi-ooxml-schemas

    总结来说,Apache POI 3.10.1版本的上传组件为Java开发者提供了一套强大的工具,用于处理和操作Microsoft Office的文件格式,涵盖了Excel、Word和PowerPoint的多种功能,大大提升了开发效率并扩展了应用的可能性。

    struts2 POI-3.7 excel上传下载

    总结来说,"struts2 POI-3.7 excel上传下载"项目展示了如何利用Struts2的文件上传功能和Apache POI库在Java Web应用中实现Excel文件的上传和下载。通过对Struts2的拦截器配置、Action类的编写以及POI的API使用,我们...

    poi-bin-3.17-20170915.tar.gz

    总结来说,Apache POI是Java开发中处理Microsoft Office文件的强大工具,提供了对Excel、Word等多种文件格式的全面支持,能够满足各种业务场景的需求。在"poi-bin-3.17-20170915.tar.gz"这个压缩包中,包含了3.17...

    POI实现的excel的上传下载

    总结来说,Apache POI是Java处理Excel文件的强大工具,通过它我们可以轻松地实现Excel的上传和下载功能,满足Web应用中的数据交互需求。在实际项目中,理解并掌握POI的使用方法对于提升工作效率至关重要。

    基于POI的Excel上传下载完成示例

    总结来说,"基于POI的Excel上传下载完成示例"是一个集成了Ajax、Servlet和Apache POI的综合案例,它涵盖了文件上传、文件下载、Excel数据读写等多个关键技术点,对于学习和理解Java Web开发中的Excel处理具有很高的...

    SpringBoot整合poi实现Excel文件的导入和导出.pdf

    总结,通过SpringBoot结合Apache POI,我们可以轻松地实现Excel文件的导入和导出功能。在处理数据时,使用`ExcelFormatUtil`工具类能有效地处理各种单元格数据格式,确保数据处理的准确性和一致性。同时,要注意文件...

    poi-3.15.jar

    《Apache POI:Java解析Excel与Word的利器》 Apache POI,这是一套由Apache软件基金会开发的开源库,专门用于处理Microsoft Office格式的文件,如Excel(.xlsx, .xls)、Word(.docx, .doc)等。标题中的"poi-3.15....

    poi ExcelUtils demo下载

    例如,它可以用于将数据库中的数据导出为Excel文件供用户下载,或者接收用户上传的Excel文件并将数据导入到数据库。 6. **API调用**: 在Demo中,开发者可以学习如何调用ExcelUtils的API,如创建工作簿、工作表,...

    poi解析word、excel/ppt 及其其他相应的工具jar

    Apache POI 是一个开源项目,专门用于处理...总结来说,这个压缩包提供了处理Office文件所需的基本环境,你可以通过学习和使用Apache POI的相关API,轻松地在Java应用程序中集成对Word、Excel和PowerPoint的支持。

    SpringMvc+POI 处理Excel的导入操作

    package com.poiexcel.util; import java.io.IOException; import java.io.InputStream; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List...

    SpringMvc+POI 导入Excel

    总结起来,"SpringMvc+POI 导入Excel"是一个涵盖前端交互、后端处理、文件上传、数据读取、验证和保存等多个环节的综合技术实践。通过学习和掌握这些知识点,开发者可以有效地实现Web应用中的Excel数据导入功能,...

    poi操作excel

    在Java开发中,Apache POI 是一个...总结,Apache POI是Java开发中处理Excel的强大工具,结合Servlet可以方便地在Web应用中实现数据的导入导出。理解并熟练使用POI API,能够极大地提高开发效率,并提升应用的功能性。

    spring-cloud-study-poi.rar

    总结,Spring Cloud 结合Apache POI为开发者提供了强大的文档生成能力,使得在微服务架构中处理Word模板和数据填充变得高效且灵活。理解并熟练掌握这些技术,可以帮助我们在实际项目中更好地满足业务需求,提升用户...

    java利用POI技术上传&导出Excel表格并保存数据至数据库

    总结起来,Java结合Apache POI能有效处理Excel文件,无论是上传后的解析、数据转换,还是将数据导出为Excel文件,都能高效完成。这使得POI成为Java开发者处理Excel操作的首选工具。在实际开发过程中,根据项目需求,...

    java jsp 上传 下载 excel poi

    总结起来,结合Java JSP、Apache POI和适当的文件上传处理库,我们可以构建一个功能齐全的系统,允许用户上传Excel文件,系统将文件保存在服务器上,然后用户可以选择下载。同时,通过Apache POI,我们可以轻松地...

    springmvc+POI的Excel文件导入导出

    总结起来,"SpringMvc+POI的Excel文件导入导出"涉及到的关键技术包括Spring MVC的文件上传处理、Apache POI的Excel读写操作、以及模板填充和导出。通过熟练掌握这些技术,开发者能够高效地处理企业级应用中的Excel...

    poi_jar包.zip

    Apache POI是一个流行的开源库,主要用于处理Microsoft Office格式的文件,如Word(.doc, .docx)、Excel(.xls, .xlsx)和PowerPoint(.ppt, .pptx)。在Java开发环境中,POI库提供了API,使得开发者能够创建、读取...

    基于SSM的POI导入导出Excel实战

    总结一下,本教程的目的是教你如何在SSM框架下利用Apache POI实现Excel的导入导出功能,通过这个过程,你可以学习到如何结合SpringMVC的Controller、Service层以及POI库来处理文件操作,同时提升对SSM框架和Excel...

    java 基于poi的excel操作工具类

    总结来说,`java 基于poi的excel操作工具类` 提供了全面的Excel操作功能,能够帮助开发者便捷地处理Excel文件,无论是从文件系统导入数据,还是向服务器存储文件,或者是通过HTTP响应返回Excel流。Apache POI库的...

Global site tag (gtag.js) - Google Analytics