xssfworkbook 写excel什么时候抛ioexception

java POI 写入百万数据到 excel
时间: 20:28:37
&&&& 阅读:361
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&.xls文件只支持6w+的数据写入
.xlsx文件只支持104w+数据的写入
在java中jxl工具类只能操作.xls的文件,不能操作.xlsx的文件
POI工具类能够支持.xlsx的文件操作。
& excel的数据读写都相应的简单,网上也有很多的代码,我这里要说的是怎么样写入100w+的数据到Excel中。
& &在POI中,XSSFWorkbook &wb = new XSSFWorkbook ();创建的工作簿能够写入大量的数据,但很大的可能下会虚拟机内存不够而报错
在这种情况下有两种解决方案:
& &1.重新分配java 虚拟机内存(我没有试验)
& &2.POI中还提供了SXSSFWorkbook swb=new SXSSFWorkbook(wb,10000);代码的创建工作,第一个参数是XSSFWorkbook &wb = new XSSFWorkbook ();第二个参数是内存中处理的数据行数,当数据量超过你所设置的数量,会把多的数据保存到磁盘上。
这里提供一个简单写入excel文件的代码段:
public static void createWorkBook(List&Entity& dataList,String filename) throws IOException {
System.out.println("数据数量=="+dataList.size());
//创建excel工作簿
XSSFWorkbook
wb = new XSSFWorkbook ();
SXSSFWorkbook swb=new SXSSFWorkbook(wb,10000);
//swb.createSheet()
//创建第一个sheet(页),命名为 new sheet
SXSSFSheet sheet =
sheet = (SXSSFSheet) swb.createSheet("myData");
//Cell 方格
// Row 和 Cell 都是从0开始计数的
for(int i=0;i&dataList.size();i++)
Entity en=dataList.get(i);
// 创建一行,在页sheet上
Row row = sheet.createRow(i);
// 在row行上创建一个方格
/*org.apache.poi.ss.usermodel.Cell cell =
row.createCell(0);
//设置方格的显示
cell.setCellValue(1); */
//System.out.println(en.getPkg_name());
//row.createCell(0).setCellValue("xx");
row.createCell(0).setCellValue(en.getDate());
// Or do it on one line.
row.createCell(1).setCellValue(en.getxxx());
row.createCell(2).setCellValue(en.getxxx()());
row.createCell(3).setCellValue(en.getxxx()());
row.createCell(4).setCellValue(en.getxxx()());
//创建一个文件 命名为workbook.xls
FileOutputStream fileOut = new FileOutputStream(filename);
// 把上面创建的工作簿输出到文件中
swb.write(fileOut);
//关闭输出流
fileOut.close();
System.out.println("写入完成----");
  标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:/owner/p/4194276.html
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!博客分类:
说明:我的电脑 2.0CPU 2G内存 能够十秒钟导出 20W 条数据 ,12.8M的excel内容压缩后2.68M
我们知道在POI导出Excel时,数据量大了,很容易导致内存溢出。由于Excel 一个sheet允许的最大行数是65536这时我们想到分sheet进行导出;但是这种情况也不能解决内存溢出的问题。毕竟数据还是一次性在内存中进行保存的。这时我们想是不是可以导出多个excel呢?下面我就尝试着按照导出多个excel
首先:我们要确定数据量有多大,然后确定一个excel导出多少条数据,这样就可以确定导出的Excel的数量,于是我们就可以循环的导出excel并保存在任意的临时目录中。去这样如果内存不够的话虚拟机就会去进行回收已经保存的excel在内存中的空间。
假设我们我们已经成功的生成了多个excel,这时我们怎么把这N个excel文档传到客户端呢?其实一个一个的传也未尝不可,但是考虑那样对用户来说体验不够好,再次多个文件在网络上传输也比较慢。我们可以考虑对生成的几个文件进行压缩,然后传到客户端。
总结一下第一、分批次生成excel第二、压缩后到客户端
下面我把我的一个小实例贴上供大家参考
第一、Person.java 普通javabean
* @author /
public class Person {
private Double money=0.0;
public Double getMoney() {
public void setMoney(Double money) {
this.money =
public Person(Integer id, String name, String address, String tel,Double money) {
this.name =
this.address =
this.tel =
this.money=
public Integer getId() {
public void setId(Integer id) {
public String getName() {
public void setName(String name) {
this.name =
public String getAddress() {
public void setAddress(String address) {
this.address =
public String getTel() {
public void setTel(String tel) {
this.tel =
第二、PersonService模拟业务逻辑循环生成100023个Person对象
import java.util.ArrayL
import java.util.L
import bean.P
* @author /
public class PersonService {
public static List getPerson(){
List&Person& list =new ArrayList&Person&();
for(int i=0;i&100320;i++){
list.add(new Person(i,"zhangsan"+i,"北京"+i,"",+i));
第三、业务处理Servlet
import java.io.F
import java.io.FileInputS
import java.io.FileOutputS
import java.io.IOE
import java.io.OutputS
import java.text.SimpleDateF
import java.util.ArrayL
import java.util.D
import java.util.L
import javax.servlet.ServletE
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import org.apache.poi.hssf.usermodel.HSSFW
import org.apache.poi.hssf.util.CellRangeA
import org.apache.poi.ss.usermodel.C
import org.apache.poi.ss.usermodel.CellS
import org.apache.poi.ss.usermodel.R
import org.apache.poi.ss.usermodel.S
import org.apache.poi.ss.usermodel.W
import bean.P
import service.PersonS
* @author /
public class PersonServlet extends HttpServlet {
private String fileN
public PersonServlet() {
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 文件名获取
Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
String f = "Person-" + format.format(date);
this.fileName =
setResponseHeader(response);
OutputStream out =
out = response.getOutputStream();
List&Person& list = PersonService.getPerson();
toExcel(list,request,10000,f,out);
} catch (IOException e1) {
e1.printStackTrace();
} finally {
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
/** 设置响应头 */
public void setResponseHeader(HttpServletResponse response) {
response.setContentType("application/octet-charset=UTF-8");
response.setHeader("Content-Disposition", "filename="
+ java.net.URLEncoder.encode(this.fileName, "UTF-8")
+ ".zip");
response.addHeader("Pargam", "no-cache");
response.addHeader("Cache-Control", "no-cache");
} catch (Exception ex) {
ex.printStackTrace();
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
public void init() throws ServletException {
// Put your code here
public void toExcel(List&Person& list, HttpServletRequest request,
int length, String f, OutputStream out) throws IOException {
List&String& fileNames = new ArrayList();// 用于存放生成的文件名称s
File zip = new File(request.getRealPath("/files") + "/" + f + ".zip");// 压缩文件
// 生成excel
for (int j = 0, n = list.size() / length + 1; j & j++) {
Workbook book = new HSSFWorkbook();
Sheet sheet = book.createSheet("person");
double d = 0;// 用来统计
String file = request.getRealPath("/files") + "/" + f + "-" + j
fileNames.add(file);
FileOutputStream o =
o = new FileOutputStream(file);
// sheet.addMergedRegion(new
// CellRangeAddress(list.size()+1,0,list.size()+5,6));
Row row = sheet.createRow(0);
row.createCell(0).setCellValue("ID");
row.createCell(1).setCellValue("NAME");
row.createCell(2).setCellValue("ADDRESS");
row.createCell(3).setCellValue("TEL");
row.createCell(4).setCellValue("Money");
int m = 1;
for (int i = 1, min = (list.size() - j * length + 1) & (length + 1) ? (length + 1)
: (list.size() - j * length + 1); i & i++) {
Person user = list.get(length * (j) + i - 1);
Double dd = user.getMoney();
if (dd == null) {
row = sheet.createRow(i);
row.createCell(0).setCellValue(user.getId());
row.createCell(1).setCellValue(user.getName());
row.createCell(2).setCellValue(user.getAddress());
row.createCell(3).setCellValue(user.getTel());
row.createCell(4).setCellValue(dd);
CellStyle cellStyle2 = book.createCellStyle();
cellStyle2.setAlignment(CellStyle.ALIGN_CENTER);
row = sheet.createRow(m);
Cell cell0 = row.createCell(0);
cell0.setCellValue("Total");
cell0.setCellStyle(cellStyle2);
Cell cell4 = row.createCell(4);
cell4.setCellValue(d);
cell4.setCellStyle(cellStyle2);
sheet.addMergedRegion(new CellRangeAddress(m, m, 0, 3));
} catch (Exception e) {
e.printStackTrace();
book.write(o);
} catch (Exception ex) {
ex.printStackTrace();
} finally {
o.flush();
o.close();
File srcfile[] = new File[fileNames.size()];
for (int i = 0, n = fileNames.size(); i & i++) {
srcfile[i] = new File(fileNames.get(i));
util.FileZip.ZipFiles(srcfile, zip);
FileInputStream inStream = new FileInputStream(zip);
byte[] buf = new byte[4096];
while (((readLength = inStream.read(buf)) != -1)) {
out.write(buf, 0, readLength);
inStream.close();
最后还有个工具类
import java.io.FileInputS
import java.io.FileOutputS
import java.io.IOE
import java.util.zip.ZipE
import java.util.zip.ZipOutputS
* @author /
public class FileZip {
* @param srcfile 文件名数组
* @param zipfile 压缩后文件
public static void ZipFiles(java.io.File[] srcfile, java.io.File zipfile) {
byte[] buf = new byte[1024];
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
zipfile));
for (int i = 0; i & srcfile. i++) {
FileInputStream in = new FileInputStream(srcfile[i]);
out.putNextEntry(new ZipEntry(srcfile[i].getName()));
while ((len = in.read(buf)) & 0) {
out.write(buf, 0, len);
out.closeEntry();
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
OK全部内容完成
12.8M的excel内容压缩后2.68M,给力吧
以后记得代码加注释
亲,记得给个评论哦
下载次数: 1772
浏览 36667
双击下载的zip文件,为什么报错"C:\Documents and Settings\wot_mengyong\桌面\Person-33.zip: 不可预料的压缩文件末端".解压出来就没问题.这是为什么呢?可能你的excel文件在制作的过程中出现问题了,比如后缀名,比如poi的Style样式使用过多等原因。
楼主,超级给力!!!楼下的你们就知道来挑刺,自己去做啊?人家楼主抛砖引玉出来不是让你们挑刺的,想挑刺,贴解决代码啊。一群眼高手低的人。poi大数据,谁都知道要分页,还用你们强调?楼主是一个简单的Demo,真正用到产品里肯定是调优的。能把这个放出来,你们百度到就已经很给力了,要有感激的心。楼主好样的。下面解决一下并发的问题。大数据量5W条*40多列的情况下20个并发在was6.5 2GJvm下直接服务卡死了。poi3.8据说可以限制内存释放,但是不支持2003xls格式,所以我也在想办法继续搞。10000条导出一次,压缩包导出最好了。解决方法就是使用poi-3.10最新版的,里面可以自动释放内存,不过只支持Excel2007以上格式,生成文件后缀改为xlsx。非常爽,无内存溢出,还需要自己手动清空一下表格即可,清空方法为:& int rowInMemory = 100;// 100测试最佳& // 刷新到硬盘&&&& SXSSFWorkbook wb = new SXSSFWorkbook(rowInMemory); // keep 100 rows in memory,&&&&&&&&&&& & //临时文件进行压缩,建议不要true,否则会影响导出时间&& &&&&&&&& wb.setCompressTempFiles(false);& // sheet名字&&&&&&&&&&& SXSSFSheet sheet = (SXSSFSheet) wb.createSheet(sheetName);最后的最后你可以手动释放内存,强制刷新sheet到硬盘。&&&&&&&& & // 刷新到硬盘&&&&&&&&&&& sheet.flushRows();&&&&&&&&&&& logger.debug("-----------------------------flush ok-----------------------------------");&&&&&&&&&&& bodys.clear();&&&&&&&&&&& bodys =&&&&&&&&&&& logger.debug("内存制作数据已经结束!");&&&&&&&&&&& // 拿到输出流&&&&&&&&&&& fos = new FileOutputStream(file);&&&&&&&&&&& // 缓冲&&&&&&&&&&& outr = new BufferedOutputStream(fos);&&&&&&&&&&& // 生成excel&&&&&&&&&&& wb.write(outr);&&&&&&&&&&& outr.flush();&&&&&&&&&&& outr.close();
List&Person& list = PersonService.getPerson();
toExcel(list,request,10000,f,out);
代码不够优雅,应分页读出写入excel,而不是一次性从数据库里读出20W数据大数据量的导入导出数据一般使用文本格式的中介存储,根本没必要放到excel。 这个地方确实应该分页导出
浏览: 56857 次
来自: 广州
自己用过一款中间件产品叫做pageoffice,批量导出wor ...
poi导出大量数据,这样比较麻烦,代码也比较复杂,还得区分xl ...
存放数据list,如果数据量比较大会溢出
楼主好,刚才测试一下,测试导出w条数据, ...
你好 我参考你的代码!但是导出4万条数据时!报内存溢出!QQ: ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'POI读取excel2007时出现不可思议的问题 - ITeye问答
try{
&&& FileInputStream fis = new FileInputStream(xlsxFilePath);
&&& XSSFWorkbook book = new XSSFWorkbook(fis);// 出错行
}catch (Exception e) {
&&& e.printStackTrace();
}finally{
&&& try {
&&&&&& if(null != fis)
fis.close();
&&& } catch (IOException e) {
e.printStackTrace();
&&& }
}
当程序在main方法中测试时,可以正确的执行。
但是通过web方式发布、访问,在页面上浏览文件、提交,当程序执行到
XSSFWorkbook book = new XSSFWorkbook(fis);
时,就出错了,而后台没有报任何错误,并且没有进入catch块,直接进了finally。
悬赏分提高了,各位兄弟们!(40分呀!)
问题补充:
try{
&&& FileInputStream fis = new FileInputStream(xlsxFilePath);
&&& XSSFWorkbook book = new XSSFWorkbook(fis);// 出错行
}catch (Exception e) {
&&& e.printStackTrace();
}finally{
&&& try {
&&&&&& if(null != fis)
fis.close();
&&& } catch (IOException e) {
e.printStackTrace();
&&& }
}
当程序在main方法中测试时,可以正确的执行。
但是通过web方式发布、访问,在页面上浏览文件、提交,当程序执行到
XSSFWorkbook book = new XSSFWorkbook(fis);
时,就出错了,而后台没有报任何错误,并且没有进入catch块,直接进了finally。
悬赏分提高了,各位兄弟们!(40分呀!)
问题补充:什么向往 写道首先通过xlsxFilePath 在服务器上找下 是否有这个文件,一般通过本地上传文件到服务器上,需要将本地文件存在服务器上的,否则根据路径在服务器上是找不到这个文件的,何谈读取呢
当然是存在的,我就在我电脑上开发,选择的是电脑上的文件,怎么会文件找不到呢?
问题补充:什么向往 写道首先通过xlsxFilePath 在服务器上找下 是否有这个文件,一般通过本地上传文件到服务器上,需要将本地文件存在服务器上的,否则根据路径在服务器上是找不到这个文件的,何谈读取呢
不是找不到文件,是执行到那一句话时,直接进了finally了,如果是找不到文件,
& FileInputStream fis = new FileInputStream(xlsxFilePath);
这句话就首先报错了
问题补充:
这样选择的文件
问题补充:什么向往 写道在你的部署项目的根目录下找下xlsxFilePath,应该是这的问题
xlsxFilePath是我导入的文件绝对路径啊,比如:D:\1.xlsx
找它的用意是什么呢?你能详解一下吗?
我用的是POI读excel
问题补充:什么向往 写道假如 你用的是tomcat,项目部署在E:\\tomcat\webapps\XX项目,在这下面 你尝试下 读取一个路径为 D:\\XXX.xls,你看下是否能读取?路径的问题了
绝对路径不能吗?
关键是我用类似的方法 读取2003的xls格式的excel,一点问题都没啊
按你的意思。应该把我上传的文件,拷贝一份,放到部署后的工程的文件夹下?
问题补充:各位大侠帮我想想,需要悬赏分的,我可以再加!
问题补充:什么向往 写道假如 你用的是tomcat,项目部署在E:\\tomcat\webapps\XX项目,在这下面 你尝试下 读取一个路径为 D:\\XXX.xls,你看下是否能读取?路径的问题了
兄弟,你再帮我想想啊。
问题补充:小哀好困 写道假如以上猜测正确
http://apache-poi.1045710./XSSFWorkBook-is-not-in-poi-3-6-jar-td2311582.html
http://topic.csdn.net/u//be308a37-ac53-4ad6-8d6f-ed628cc0fe5f.html
这两个链接看看,因为XSSF和HSSF 不同,它还需要
poi-ooxm
poi-ooxml-schemas
呵呵~ 好吧 希望对你有帮助
这两个包,我有的。
问题补充:小哀好困 写道感觉最可能的还是NoClassDefFoundError
再加个catch(Error er) 然后断点看看,是什么错误
奇怪的是,怎么控制台什么都没显示呢
高手嘛!
我用catch(Error er)可以,报错信息如下:
java.lang.NoClassDefFoundError: org/apache/poi/xssf/usermodel/XSSFWorkbook
at com.acconsys.alms.exceltest.ImportExcel.importXlsx(ImportExcel.java:692)
at com.acconsys.alms.exceltest.ImportExcel.importExcel(ImportExcel.java:617)
at com.acconsys.alms.user.action.UserAction.addUserFromExcelFile(UserAction.java:1267)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:306)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.acconsys.alms.util.AuthFilter.doFilter(AuthFilter.java:78)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.apache.poi.xssf.usermodel.XSSFWorkbook
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
... 78 more
怎么会是这个错误呢?关键是我在main方法下运行真的没错啊。
问题补充:小哀好困 写道那你看看是抛出什么error
嗯 发给你了呀 但是想不通是为什么啊 我也检查了 包应该没冲突
java.lang.NoClassDefFoundError: org/apache/poi/xssf/usermodel/XSSFWorkbook
at com.acconsys.alms.exceltest.ImportExcel.importXlsx(ImportExcel.java:692)
at com.acconsys.alms.exceltest.ImportExcel.importExcel(ImportExcel.java:617)
at com.acconsys.alms.user.action.UserAction.addUserFromExcelFile(UserAction.java:1267)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:306)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.acconsys.alms.util.AuthFilter.doFilter(AuthFilter.java:78)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.apache.poi.xssf.usermodel.XSSFWorkbook
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
... 78 more
问题补充:小哀好困 写道把你工程下的lib贴出来
Caused by: java.lang.ClassNotFoundException: org.apache.poi.xssf.usermodel.XSSFWorkbook
额,这句说明了问题
稍等 我先自己看看啊
问题补充:小哀好困 写道把你工程下的lib贴出来
Caused by: java.lang.ClassNotFoundException: org.apache.poi.xssf.usermodel.XSSFWorkbook
额,这句说明了问题
可以了,谢谢你啊!
主要原因是我引以下几个包时,是从外部引入的,没有拷贝到web-inf/lib下
poi-ooxml-3.7.jar
poi-ooxml-schemas-3.7.jar
poi-scratchpad-3.7.jar
poi-examples-3.7.jar
xmlbeans-2.3.0.jar
这样做的话,可能没有发布到tomcat下。应该就是这个原因了
分数都是你的了
采纳的答案
把你工程下的lib贴出来
Caused by: java.lang.ClassNotFoundException: org.apache.poi.xssf.usermodel.XSSFWorkbook
额,这句说明了问题
java.lang.NoClassDefFoundError: org/apache/poi/xssf/usermodel/XSSFWorkbook&
亲,很明显了~ 和我猜的一样,就是包的问题
请再次检查你引入的包是否完全~
那你看看是抛出什么error
假如以上猜测正确
http://apache-poi.1045710./XSSFWorkBook-is-not-in-poi-3-6-jar-td2311582.html
http://topic.csdn.net/u//be308a37-ac53-4ad6-8d6f-ed628cc0fe5f.html
这两个链接看看,因为XSSF和HSSF 不同,它还需要
poi-ooxm
poi-ooxml-schemas
呵呵~ 好吧 希望对你有帮助
感觉最可能的还是NoClassDefFoundError
再加个catch(Error er) 然后断点看看,是什么错误
奇怪的是,怎么控制台什么都没显示呢
至于不执行catch直接跳到finally
只有一种可能,那就是,产生的是一个Error而不是一个Exception
因为Error和Exception都继承与throwable
至于原因,请听下回分解咯~ 哈哈,我也看些资料
还没认真看问题,你是说,在main下都正常
在服务器上,2003 ok 07不ok
而且你的服务器和文件是同一台机器对吗
你有上传文件吗? 还只是上传了文件的路径
假如 你用的是tomcat,项目部署在E:\\tomcat\webapps\XX项目,在这下面 你尝试下 读取一个路径为 D:\\XXX.xls,你看下是否能读取?路径的问题了
在你的部署项目的根目录下找下xlsxFilePath,应该是这的问题
首先通过xlsxFilePath 在服务器上找下 是否有这个文件,一般通过本地上传文件到服务器上,需要将本地文件存在服务器上的,否则根据路径在服务器上是找不到这个文件的,何谈读取呢
已解决问题
未解决问题}

我要回帖

更多关于 xssfworkbook 写excel 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信