请大家帮忙看看poi读取excel表,为什么.xls可以,.xlsx不行?还报错
2016-03-30 17:26
537 查看
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.sanqing.dao.SubjectDAO;
import com.sanqing.dao.SubjectDAOImpl;
import com.sanqing.po.Subject;
public class SubjectAddAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private File uploadExcel; // 上传的文件
private String uploadExcelFileName; // 上传的文件名
public File getUploadExcel() {
return uploadExcel;
}
public void setUploadExcel(File uploadExcel) {
this.uploadExcel = uploadExcel;
}
public String getUploadExcelFileName() {
return uploadExcelFileName;
}
public void setUploadExcelFileName(String uploadExcelFileName) {
this.uploadExcelFileName = uploadExcelFileName;
}
SubjectDAO subjectDAO = new SubjectDAOImpl();
public String loadExcel() {
String path = "/excel";// 上传路径
String targetDirectory = ServletActionContext.getServletContext()
.getRealPath(path);
// 生成上传的文件对象
File targetFile = new File(targetDirectory, uploadExcelFileName);
// 如果文件已经存在,则删除原文件
if (targetFile.exists()) {
targetFile.delete();
}
// 复制file对象,实现上传
try {
FileUtils.copyFile(uploadExcel, targetFile);
System.out.println("文件上传成功");
} catch (Exception e) {
e.printStackTrace();
}
// 从导入的文件中读取数据
System.out.println(uploadExcelFileName);
loadExcelInfo(uploadExcelFileName);
return SUCCESS;
}
/**
* 把excel表中读出的数据封装成一个List,统一导入数据库
*
* @param uploadExcelFileName
*/
private void loadExcelInfo(String uploadExcelFileName) {
String path = "/excel";
String targetDirectory = ServletActionContext.getServletContext()
.getRealPath(path);
// 生成上传的文件对象
File targetFile = new File(targetDirectory, uploadExcelFileName);
List<Subject> subList = new ArrayList<Subject>();
Workbook wb = null;
try {
FileInputStream fis = new FileInputStream(targetFile);
if (uploadExcelFileName.toLowerCase().endsWith("xls")) {
wb = new HSSFWorkbook(fis);
} else if (uploadExcelFileName.toLowerCase().endsWith("xlsx")) {
wb = new XSSFWorkbook(fis);
}
Sheet sheet = wb.getSheetAt(0);
int rowNum = sheet.getLastRowNum() + 1;// 获取行数
// i 从1开始表示第一行为标题 不包含在数据中
for (int i = 1; i < rowNum; i++) {
Subject subject = new Subject();
Row row = sheet.getRow(i);
int cellNum = row.getLastCellNum();
for (int j = 0; j < cellNum; j++) {
Cell cell = row.getCell(j);
String cellValue = null;
switch (cell.getCellType()) {// 判断excel单元格内容的格式,并对其进行转换,以便插入数据库
case 0:// 数值型
cellValue = String.valueOf(cell.getNumericCellValue());
break;
case 1:// 字符串型
cellValue = cell.getStringCellValue();
break;
case 2:// 公式型
cellValue = String.valueOf(cell.getDateCellValue());
break;
case 3:// 空值
cellValue = "";
break;
case 4:// 布尔型
cellValue = String.valueOf(cell.getBooleanCellValue());
break;
case 5:// 错误
cellValue = String.valueOf(cell.getErrorCellValue());
break;
default:
break;
}
switch (j) {// 通过列数来判断对应插入的字段
// 数据中不应该包括ID这样的主键记录
case 0:
subject.setSubjectTitle(cellValue); // 题目
break;
case 1:
subject.setSubjectOptionA(cellValue); // 选项A
break;
case 2:
subject.setSubjectOptionB(cellValue); // 选项B
break;
case 3:
subject.setSubjectOptionC(cellValue); // 选项C
break;
case 4:
subject.setSubjectOptionD(cellValue); // 选项D
break;
case 5:
subject.setSubjectAnswer(cellValue); // 答案
break;
case 6:
subject.setSubjectParse(cellValue); // 题目解析
break;
default:
break;
}
}
subList.add(subject);
}
System.out.println(subList.size());
System.out.println(subList);
subjectDAO.SubIntoDB(subList);
} catch (Exception e) {
e.printStackTrace();
}
}
}
报错:实在客户端报错
root cause
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.sanqing.dao.SubjectDAO;
import com.sanqing.dao.SubjectDAOImpl;
import com.sanqing.po.Subject;
public class SubjectAddAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private File uploadExcel; // 上传的文件
private String uploadExcelFileName; // 上传的文件名
public File getUploadExcel() {
return uploadExcel;
}
public void setUploadExcel(File uploadExcel) {
this.uploadExcel = uploadExcel;
}
public String getUploadExcelFileName() {
return uploadExcelFileName;
}
public void setUploadExcelFileName(String uploadExcelFileName) {
this.uploadExcelFileName = uploadExcelFileName;
}
SubjectDAO subjectDAO = new SubjectDAOImpl();
public String loadExcel() {
String path = "/excel";// 上传路径
String targetDirectory = ServletActionContext.getServletContext()
.getRealPath(path);
// 生成上传的文件对象
File targetFile = new File(targetDirectory, uploadExcelFileName);
// 如果文件已经存在,则删除原文件
if (targetFile.exists()) {
targetFile.delete();
}
// 复制file对象,实现上传
try {
FileUtils.copyFile(uploadExcel, targetFile);
System.out.println("文件上传成功");
} catch (Exception e) {
e.printStackTrace();
}
// 从导入的文件中读取数据
System.out.println(uploadExcelFileName);
loadExcelInfo(uploadExcelFileName);
return SUCCESS;
}
/**
* 把excel表中读出的数据封装成一个List,统一导入数据库
*
* @param uploadExcelFileName
*/
private void loadExcelInfo(String uploadExcelFileName) {
String path = "/excel";
String targetDirectory = ServletActionContext.getServletContext()
.getRealPath(path);
// 生成上传的文件对象
File targetFile = new File(targetDirectory, uploadExcelFileName);
List<Subject> subList = new ArrayList<Subject>();
Workbook wb = null;
try {
FileInputStream fis = new FileInputStream(targetFile);
if (uploadExcelFileName.toLowerCase().endsWith("xls")) {
wb = new HSSFWorkbook(fis);
} else if (uploadExcelFileName.toLowerCase().endsWith("xlsx")) {
wb = new XSSFWorkbook(fis);
}
Sheet sheet = wb.getSheetAt(0);
int rowNum = sheet.getLastRowNum() + 1;// 获取行数
// i 从1开始表示第一行为标题 不包含在数据中
for (int i = 1; i < rowNum; i++) {
Subject subject = new Subject();
Row row = sheet.getRow(i);
int cellNum = row.getLastCellNum();
for (int j = 0; j < cellNum; j++) {
Cell cell = row.getCell(j);
String cellValue = null;
switch (cell.getCellType()) {// 判断excel单元格内容的格式,并对其进行转换,以便插入数据库
case 0:// 数值型
cellValue = String.valueOf(cell.getNumericCellValue());
break;
case 1:// 字符串型
cellValue = cell.getStringCellValue();
break;
case 2:// 公式型
cellValue = String.valueOf(cell.getDateCellValue());
break;
case 3:// 空值
cellValue = "";
break;
case 4:// 布尔型
cellValue = String.valueOf(cell.getBooleanCellValue());
break;
case 5:// 错误
cellValue = String.valueOf(cell.getErrorCellValue());
break;
default:
break;
}
switch (j) {// 通过列数来判断对应插入的字段
// 数据中不应该包括ID这样的主键记录
case 0:
subject.setSubjectTitle(cellValue); // 题目
break;
case 1:
subject.setSubjectOptionA(cellValue); // 选项A
break;
case 2:
subject.setSubjectOptionB(cellValue); // 选项B
break;
case 3:
subject.setSubjectOptionC(cellValue); // 选项C
break;
case 4:
subject.setSubjectOptionD(cellValue); // 选项D
break;
case 5:
subject.setSubjectAnswer(cellValue); // 答案
break;
case 6:
subject.setSubjectParse(cellValue); // 题目解析
break;
default:
break;
}
}
subList.add(subject);
}
System.out.println(subList.size());
System.out.println(subList);
subjectDAO.SubIntoDB(subList);
} catch (Exception e) {
e.printStackTrace();
}
}
}
报错:实在客户端报错
java.lang.reflect.InvocationTargetException sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:606) com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440) com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249) org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:306) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468) org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
root cause
java.lang.NoClassDefFoundError: Could not initialize class org.apache.poi.util.DocumentHelper org.apache.poi.openxml4j.opc.internal.ContentTypeManager.parseContentTypesFile(ContentTypeManager.java:373) org.apache.poi.openxml4j.opc.internal.ContentTypeManager.<init>(ContentTypeManager.java:102) org.apache.poi.openxml4j.opc.internal.ZipContentTypeManager.<init>(ZipContentTypeManager.java:54) org.apache.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java:192) org.apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:673) org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:274) org.apache.poi.util.PackageHelper.open(PackageHelper.java:37) org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:254) com.sanqing.action.SubjectAddAction.loadExcelInfo(SubjectAddAction.java:99) com.sanqing.action.SubjectAddAction.loadExcel(SubjectAddAction.java:69) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:606) com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440) com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249) org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:306) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468) org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
相关文章推荐
- 【Spring AOP】基于Schema配置切面
- iOS中ActionSheet和Alert的区别
- 本地yum库的搭建
- 1013. 数素数
- 在某个Activity上点击返回时,退出全部的Activity并退出应用程序
- Spring MVC系列(一)之Hello World
- 23种设计模式简介
- Mysql5.7.11中groupby的sql语句引起的异常
- 线程间的通信
- Vijos P1060 盒子
- vijosP1210 盒子与球
- vijosP1049 送给圣诞夜的礼品
- vijosP1092 全排列
- vijosP1289 老板娘的促销方案
- vijosP1413 Valentine’s Present
- vijosP1371 方程的解
- vijosP1388 二叉树数
- vijosP1687 细菌总数
- vijosP1629 八
- BZOJ1008 [HNOI2008]越狱