该POIpoi 不可读取的内容认领,不能再关联怎么解决

3252人阅读
& & & & // 构造 XSSFWorkbook 对象,strPath 传入文件路径
& & & & XSSFWorkbook xwb = new XSSFWorkbook(strPath);
& & & & // 读取第一章表格内容
& & & & XSSFSheet sheet = xwb.getSheetAt(0);
& & & & // 定义 row、cell
& & & & XSSFR
& & & & // 循环输出表格中的内容
& & & & for (int i = sheet.getFirstRowNum(); i & sheet.getPhysicalNumberOfRows(); i++) {
& & & & & & row = sheet.getRow(i);
& & & & & & for (int j = row.getFirstCellNum(); j & row.getPhysicalNumberOfCells(); j++) {
& & & & & & & & // 通过 row.getCell(j).toString() 获取单元格内容,
& & & & & & & & cell = row.getCell(j).toString();
& & & & & & & & System.out.print(cell + &\t&);
& & & & & & }
& & & & & & System.out.println(&&);
FileOutputStream out = new FileOutputStream(new File(&D://result.xlsx&));
Workbook writeWB = new SXSSFWorkbook(500);
Sheet writeSheet = writeWB.createSheet();
for (int rr = 0; rr & 400000; rr++) {
Row writeRow = writeSheet.createRow(rr);
for (int cc = 0; cc & 10; cc++) {
writeRow.createCell(cc).setCellValue(&测试& + rr + &,& + cc);
writeWB.write(out);
& & & & // 构造 XSSFWorkbook 对象,strPath 传入文件路径
& & & & XSSFWorkbook xwb = new XSSFWorkbook(strPath);
& & & & // 读取第一章表格内容
& & & & XSSFSheet sheet = xwb.getSheetAt(0);
& & & & // 定义 row、cell
& & & & XSSFR
& & & & // 循环输出表格中的内容
& & & & for (int i = sheet.getFirstRowNum(); i & sheet.getPhysicalNumberOfRows(); i++) {
& & & & & & row = sheet.getRow(i);
& & & & & & for (int j = row.getFirstCellNum(); j & row.getPhysicalNumberOfCells(); j++) {
& & & & & & & & // 通过 row.getCell(j).toString() 获取单元格内容,
& & & & & & & & cell = row.getCell(j).toString();
& & & & & & & & System.out.print(cell + &\t&);
& & & & & & }
& & & & & & System.out.println(&&);
& & public static void main(String[] args) {
& & & & SimpleDateFormat sdf = new SimpleDateFormat(&HH:mm:ss:SS&);
& & & & TimeZone t = sdf.getTimeZone();
& & & & t.setRawOffset(0);
& & & & sdf.setTimeZone(t);
& & & & Long startTime = System.currentTimeMillis();
& & & & String fileName = &F:\\我的文档\\学生缴费代码.xlsx&;
& & & & // 检测代码
& & & & try {
& & & & & & PoiReadExcel er = new PoiReadExcel();
& & & & & & // 读取excel2007
& & & & & & er.testPoiExcel2007(fileName);
& & & & } catch (Exception ex) {
& & & & & & Logger.getLogger(FastexcelReadExcel.class.getName()).log(Level.SEVERE, null, ex);
& & & & Long endTime = System.currentTimeMillis();
& & & & System.out.println(&用时:& + sdf.format(new Date(endTime - startTime)));
POI3.8的SXSSF包是XSSF的一个扩展版本,支持流处理,在生成大数据量的电子表格且堆空间有限时使用。SXSSF通过限制内存中可访问的记录行数来实现其低内存利用,当达到限定值时,新一行数据的加入会引起老一行的数据刷新到硬盘。
&&&&&&&比如内存中限制行数为100,当行号到达101时,行号为0的记录刷新到硬盘并从内存中删除,当行号到达102时,行号为1的记录刷新到硬盘,并从内存中删除,以此类推。
&&&&&&&rowAccessWindowSize代表指定的内存中缓存记录数,默认为100,此值可以通过
new&SXSSFWorkbook(int&rowAccessWindowSize)或SXSSFSheet.setRandomAccessWindowSize(intwindowSize)来设置。
&&&&&&&SXSSF在把内存数据刷新到硬盘时,是把每个SHEET生成一个临时文件,这个临时文件可能会很大,有可以会达到G级别,如果文件的过大对你来说是一个问题,你可以使用下面的方法让SXSSF来进行压缩,当然性能也会有一定的影响。
&&&&&&&&&&&&&&&SXSSFWorkbook&wb&=&new&SXSSFWorkbook();&&&&&&&&&&&&&&&wb.setCompressTempFiles(true);&//&temp&files&will&be&gzipped
生成三个SHEET,每个SHEET有6000行记录,共18万行记录
importjava.io.FileOutputS
importorg.apache.poi.ss.usermodel.C
importorg.apache.poi.ss.usermodel.R
importorg.apache.poi.ss.usermodel.S
importorg.apache.poi.ss.util.CellR
importorg.apache.poi.xssf.streaming.SXSSFS
importorg.apache.poi.xssf.streaming.SXSSFW
public&classSXSSFWorkBookUtil&{
&&&&public&voidtestWorkBook()&{
&&&&&&&try{
&&&&&&&&&&&longcurr_time=System.currentTimeMillis();
&&&&&&&&&&&introwaccess=100;//内存中缓存记录行数
&&&&&&&&&&&/*keep&100&rowsin&memory,exceeding&rows&will&be&flushed&to&disk*/
&&&&&&&&&&&SXSSFWorkbook&wb&=&newSXSSFWorkbook(rowaccess);&
&&&&&&&&&&&intsheet_num=3;//生成3个SHEET
&&&&&&&&&&&for(inti=0;i&sheet_i++){
&&&&&&&&&&&&&&Sheet&sh&=&wb.createSheet();
&&&&&&&&&&&&&&//每个SHEET有60000ROW
&&&&&&&&&&&&&&for(intrownum&=&0;&rownum&&&60000;&rownum++)&{
&&&&&&&&&&&&&&&&&&Row&row&=&sh.createRow(rownum);
&&&&&&&&&&&&&&&&&&//每行有10个CELL
&&&&&&&&&&&&&&&&&&for(intcellnum&=&0;&cellnum&&&10;&cellnum++)&{
&&&&&&&&&&&&&&&&&&&&&Cell&cell&=&row.createCell(cellnum);
&&&&&&&&&&&&&&&&&&&&&String&address&=&newCellReference(cell).formatAsString();
&&&&&&&&&&&&&&&&&&&&&cell.setCellValue(address);
&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&//每当行数达到设置的值就刷新数据到硬盘,以清理内存
&&&&&&&&&&&&&&&&&&if(rownum%rowaccess==0){
&&&&&&&&&&&&&&&&&&&&&((SXSSFSheet)sh).flushRows();
&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&}
&&&&&&&&&&&}
&&&&&&&&&&&/*写数据到文件中*/
&&&&&&&&&&&FileOutputStream&os&=&newFileOutputStream(&d:/data/poi/biggrid.xlsx&);&&&&
&&&&&&&&&&&wb.write(os);
&&&&&&&&&&&os.close();
&&&&&&&&&&&/*计算耗时*/
&&&&&&&&&&&System.out.println(&耗时:&+(System.currentTimeMillis()-curr_time)/1000);
&&&&&&&}&catch(Exception&e)&{
&&&&&&&&&&&e.printStackTrace();
对于不同的rowAccessWindowSize值,用上面的例子进行耗时测试,结果如下:
rowAccessWindowSize&&&&Time(s)
5000&&&&293
1000&&&&69
以上测试结果是在个人笔记本电脑上进行的,配置为:
Dual-Core&CPU&TGHz&2.19GHz
Memory&1.86GB
以上测试过程只是进行了一次,并没有多次测试求平均值,数据也只想表达当设置不同的rowAccessWindowSize值,耗时的一种趋势。
可见一般情况下,使用默认&#即可。
import java.io.InputS
import java.util.ArrayL
import java.util.I
import java.util.L
import org.apache.poi.openxml4j.opc.OPCP
import org.apache.poi.xssf.eventusermodel.XSSFR
import org.apache.poi.xssf.model.SharedStringsT
import org.apache.poi.xssf.usermodel.XSSFRichTextS
import org.xml.sax.A
import org.xml.sax.InputS
import org.xml.sax.SAXE
import org.xml.sax.XMLR
import org.xml.sax.helpers.DefaultH
import org.xml.sax.helpers.XMLReaderF
public class ExcelUtil extends DefaultHandler {
private SharedStringsT
private String lastC
private boolean nextIsS
private int sheetIndex = -1;
private List&String& rowlist = new ArrayList&String&();
private int curRow = 0;
private int curCol = 0;
* 读取第一个工作簿的入口方法
* @param path
public void readOneSheet(String path) throws Exception {
OPCPackage pkg = OPCPackage.open(path);
XSSFReader r = new XSSFReader(pkg);
SharedStringsTable sst = r.getSharedStringsTable();
XMLReader parser = fetchSheetParser(sst);
InputStream sheet = r.getSheet(&rId1&);
InputSource sheetSource = new InputSource(sheet);
parser.parse(sheetSource);
sheet.close();
* 读取所有工作簿的入口方法
* @param path
* @throws Exception
public void process(String path) throws Exception {
OPCPackage pkg = OPCPackage.open(path);
XSSFReader r = new XSSFReader(pkg);
SharedStringsTable sst = r.getSharedStringsTable();
XMLReader parser = fetchSheetParser(sst);
Iterator&InputStream& sheets = r.getSheetsData();
while (sheets.hasNext()) {
curRow = 0;
sheetIndex++;
InputStream sheet = sheets.next();
InputSource sheetSource = new InputSource(sheet);
parser.parse(sheetSource);
sheet.close();
* 该方法自动被调用,每读一行调用一次,在方法中写自己的业务逻辑即可
* @param sheetIndex 工作簿序号
* @param curRow 处理到第几行
* @param rowList 当前数据行的数据集合
public void optRow(int sheetIndex, int curRow, List&String& rowList) {
String temp = &&;
for(String str : rowList) {
temp += str + &_&;
System.out.println(temp);
public XMLReader fetchSheetParser(SharedStringsTable sst) throws SAXException {
XMLReader parser = XMLReaderFactory
.createXMLReader(&org.apache.xerces.parsers.SAXParser&);
this.sst =
parser.setContentHandler(this);
public void startElement(String uri, String localName, String name,
Attributes attributes) throws SAXException {
// c =& 单元格
if (name.equals(&c&)) {
// 如果下一个元素是 SST 的索引,则将nextIsString标记为true
String cellType = attributes.getValue(&t&);
if (cellType != null && cellType.equals(&s&)) {
nextIsString =
nextIsString =
lastContents = &&;
public void endElement(String uri, String localName, String name)
throws SAXException {
// 根据SST的索引值的到单元格的真正要存储的字符串
// 这时characters()方法可能会被调用多次
if (nextIsString) {
int idx = Integer.parseInt(lastContents);
lastContents = new XSSFRichTextString(sst.getEntryAt(idx))
.toString();
} catch (Exception e) {
// v =& 单元格的值,如果单元格是字符串则v标签的值为该字符串在SST中的索引
// 将单元格内容加入rowlist中,在这之前先去掉字符串前后的空白符
if (name.equals(&v&)) {
String value = lastContents.trim();
value = value.equals(&&) ? & & :
rowlist.add(curCol, value);
// 如果标签名称为 row ,这说明已到行尾,调用 optRows() 方法
if (name.equals(&row&)) {
optRow(sheetIndex, curRow, rowlist);
rowlist.clear();
curCol = 0;
public void characters(char[] ch, int start, int length)
throws SAXException {
// 得到单元格内容的值
lastContents += new String(ch, start, length);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:190309次
积分:2655
积分:2655
排名:第11709名
原创:82篇
转载:27篇
评论:11条
(2)(5)(1)(2)(9)(1)(4)(2)(3)(3)(2)(6)(4)(5)(3)(1)(9)(3)(1)(1)(2)(6)(1)(5)(1)(8)(11)(3)(1)(1)(2)(1)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 在服务器上找下 是否有这个文件,一般通过本地上传文件到服务器上,需要将本地文件存在服务器上的,否则根据路径在服务器上是找不到这个文件的,何谈读取呢
已解决问题
未解决问题

我要回帖

更多关于 poi excel 不可编辑 的文章

 

随机推荐