大家好,小弟最近在优化原来的构架,实现支持excel 2007文件的上传并将数据导入数据库,遇到的问题是struts1.2 中FormFile传过来的文件流好象PIO3.7的XSSFWorkbook好象不支持,直接抛异常~
action中写的方法是List read07Excel(Inputstream is){
...}然后通过JSP页面传过来的获取的文件流实现参数的传递FormFile.getInputstream()
问题在于如下一行:
workbook = new XSSFWorkbook(is);
XSSFWorkbook支持文件的路径和文件流,但是现在文件流传过来异常,那如何获取上传文件的路径?
本地写的main函数实现读取excel 2007是没有问题的,我想问题可能就在于struts 1.2的formFile获取的文件流和XSSFWorkbook的接口有问题?
谢谢高手帮忙,小弟就这些分数啦~
action中写的方法是List read07Excel(Inputstream is){
...}然后通过JSP页面传过来的获取的文件流实现参数的传递FormFile.getInputstream()
问题在于如下一行:
workbook = new XSSFWorkbook(is);
XSSFWorkbook支持文件的路径和文件流,但是现在文件流传过来异常,那如何获取上传文件的路径?
本地写的main函数实现读取excel 2007是没有问题的,我想问题可能就在于struts 1.2的formFile获取的文件流和XSSFWorkbook的接口有问题?
谢谢高手帮忙,小弟就这些分数啦~
贴一下异常信息看看
HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException: Servlet execution threw an exception
com.icbc.util.PrivilegeFilter.doFilter(PrivilegeFilter.java:68)
com.icbc.util.NoCacheFilter.doFilter(NoCacheFilter.java:37)
com.icbc.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:28)
root cause java.lang.NoClassDefFoundError: org/apache/poi/xssf/usermodel/XSSFWorkbook
com.icbc.util.ReadExcel.read07Excel(ReadExcel.java:124)
com.icbc.fpms.provide.action.CreditExcelImportAction.execute(CreditExcelImportAction.java:74)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
com.icbc.util.PrivilegeFilter.doFilter(PrivilegeFilter.java:68)
com.icbc.util.NoCacheFilter.doFilter(NoCacheFilter.java:37)
com.icbc.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:28)
源码:大致如下:
private static List<Object> read2007Excel(InputStream file) throws IOException {
List<Object> list = new ArrayList<Object>();
// 构造 XSSFWorkbook 对象,strPath 传入文件路径
XSSFWorkbook xwb = new XSSFWorkbook(file);
// 读取第一章表格内容
//XSSFSheet sheet = xwb.getSheetAt(0);
Object value = null;
XSSFRow row = null;
XSSFCell cell = null;
for (int numSheet = 0; numSheet < xwb.getNumberOfSheets(); numSheet++) {
XSSFSheet sheet = xwb.getSheetAt(numSheet);
if (sheet == null) {
continue;
}
for (int i = sheet.getFirstRowNum(); i <= sheet.getPhysicalNumberOfRows(); i++) {
row = sheet.getRow(i);
if (row == null) {
continue;
}
List<Object> linked = new ArrayList<Object>();
for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
cell = row.getCell(j);
if (cell == null) {
continue;
}
DecimalFormat df = new DecimalFormat("0");// 格式化 number String
// // 字符
SimpleDateFormat sdf = new SimpleDateFormat(
"yyyy-MM-dd");// 格式化日期字符串
DecimalFormat nf = new DecimalFormat("0.000000");// 格式化数字
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_STRING:
System.out.println(i + "行" + j + " 列 is String type");
value = cell.getStringCellValue();
break;
case XSSFCell.CELL_TYPE_NUMERIC:
System.out.println(i + "行" + j+ " 列 is Number type ; DateFormt:"+ cell.getCellStyle().getDataFormatString());
if ("@".equals(cell.getCellStyle().getDataFormatString())) {
value = df.format(cell.getNumericCellValue());
} else if ("General".equals(cell.getCellStyle()
.getDataFormatString())) {
value = nf.format(cell.getNumericCellValue());
} else {
value = sdf.format(HSSFDateUtil.getJavaDate(cell
.getNumericCellValue()));
}
break;
case XSSFCell.CELL_TYPE_BOOLEAN:
System.out.println(i + "行" + j + " 列 is Boolean type");
value = cell.getBooleanCellValue();
break;
case XSSFCell.CELL_TYPE_BLANK:
System.out.println(i + "行" + j + " 列 is Blank type");
value = "";
break;
default:
System.out.println(i + "行" + j + " 列 is default type");
value = cell.toString();
}
//value = cell.toString();
if (value == null || "".equals(value)) {
continue;
}
linked.add(value);
}
list.add(linked);
}
}
return list;
}
java.lang.NoClassDefFoundError: org/apache/poi/xssf/usermodel/XSSFWorkbook楼主是不是没引入找个包,excel2007除了poi之外,还需要poi-ooxml-3.8-beta4-20110826.jar
poi-ooxml-schemas-3.8-beta4-20110826.jar
ooxml-lib\dom4j-1.6.1.jar
ooxml-lib\xmlbeans-2.3.0.jar
ooxml-lib\stax-api-1.0.1.jar