使用下面的代码,我得到jxl.read.biff.BiffException: Unable to recognize OLE stream
。我想使用.xls和.xlsx格式的文件。怎么解决这个?
Service.java
@Override
public boolean facultyDump(String path, HttpSession httpSession) {
Session session=sessionFactory.openSession();
session.beginTransaction();
File inputWorkbook = new File(path);
Workbook w;
try{
w = Workbook.getWorkbook(inputWorkbook);
Sheet sheet = w.getSheet(0);
for (int i = 1; i < sheet.getRows(); i++) {
for (int j = 0; j < sheet.getColumns(); j++) {
Cell cell = sheet.getCell(j, i);
if (j == 0) {
String name= cell.getContents().trim();
}
}
}
}catch(Exception ex){
ex.printStackTrace();
}finally{
session.close();sessionFactory.close();
}
return false;
}
控制台出现异常:
jxl.read.biff.BiffException: Unable to recognize OLE stream
at jxl.read.biff.CompoundFile.<init>(CompoundFile.java:116)
at jxl.read.biff.File.<init>(File.java:127)
at jxl.Workbook.getWorkbook(Workbook.java:221)
at jxl.Workbook.getWorkbook(Workbook.java:198)
at com.slv.daoimpl.RegistrationDaoImpl.facultyDump(RegistrationDaoImpl.java:2845)
at com.slv.controller.SuperAdminController.facultyDumpExcel(SuperAdminController.java:327)
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)
答案 0 :(得分:1)
@Override
public boolean facultyDump(String path, HttpSession httpSession) {
Session session=sessionFactory.openSession();
session.beginTransaction();
File inputWorkbook = new File(path);
try{
FileInputStream fis = new FileInputStream(inputWorkbook);
org.apache.poi.ss.usermodel.Workbook workbook = WorkbookFactory.create(fis);
org.apache.poi.ss.usermodel.Sheet mySheet = workbook.getSheetAt(0);
Iterator<Row> rowIterator = mySheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
System.out.print(cell.getStringCellValue() + "\t");
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.print(cell.getNumericCellValue()+ "\t") ;
break;
case Cell.CELL_TYPE_BOOLEAN:
System.out.print(cell.getBooleanCellValue() + "\t");
break;
default :
}
}
}
}catch(Exception ex){
ex.printStackTrace();
}finally{
session.close();sessionFactory.close();
}
return false;
}
答案 1 :(得分:0)
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFSheet;
try{
FileInputStream file = new FileInputStream(new File("C:\\test.xlsx"));
//Get the workbook instance for XLS file
XSSFWorkbook workbook = new XSSFWorkbook (file);
//Get first sheet from the workbook
XSSFSheet sheet = workbook.getSheetAt(0);
//Get iterator to all the rows in current sheet
Iterator<Row> rowIterator = sheet.iterator();
//Get iterator to all cells of current row
Iterator<Cell> cellIterator = row.cellIterator();
while(cellIterator.hasNext()) {
Cell cell = cellIterator.next();
switch(cell.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
System.out.print(cell.getBooleanCellValue() + "\t\t");
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.print(cell.getNumericCellValue() + "\t\t");
break;
case Cell.CELL_TYPE_STRING:
System.out.print(cell.getStringCellValue() + "\t\t");
break;
}
}
file.close();
}catch(Exception e){
e.printStackTrace();
}