java openxml,获取异常(org.apache.poi.openxml4j.exception - 没有内容类型[M1.13])阅读使用Apache POI XLSX文件时?...

i'm using Apache POI(XSSF API) for reading xlsx file.when i tried to read file.i got the following error:

org.apache.poi.POIXMLException: org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13]

Code:

public class ReadXLSX

{

private String filepath;

private XSSFWorkbook workbook;

private static Logger logger=null;

private InputStream resourceAsStream;

public ReadXLSX(String FilePath)

{

logger=LoggerFactory.getLogger("ReadXLSX");

this.filepath=FilePath;

resourceAsStream = ClassLoader.getSystemResourceAsStream(filepath);

}

public ReadXLSX(InputStream fileStream)

{

logger=LoggerFactory.getLogger("ReadXLSX");

this.resourceAsStream=fileStream;

}

private void loadFile() throws FileNotFoundException, NullObjectFoundException

{

if(resourceAsStream==null)

throw new FileNotFoundException("Unable to locate give file..");

else

{

try

{

workbook = new XSSFWorkbook(resourceAsStream);

}

catch(IOException ex)

{

}

}

}// end loadxlsFile

public String[] getSheetsName()

{

int totalsheet=0;int i=0;

String[] sheetName=null;

try {

loadFile();

totalsheet=workbook.getNumberOfSheets();

sheetName=new String[totalsheet];

while(i

{

sheetName[i]=workbook.getSheetName(i);

i++;

}

} catch (FileNotFoundException ex) {

logger.error(ex);

} catch (NullObjectFoundException ex) {

logger.error(ex);

}

return sheetName;

}

public int[] getSheetsIndex()

{

int totalsheet=0;int i=0;

int[] sheetIndex=null;

String[] sheetname=getSheetsName();

try {

loadFile();

totalsheet=workbook.getNumberOfSheets();

sheetIndex=new int[totalsheet];

while(i

{

sheetIndex[i]=workbook.getSheetIndex(sheetname[i]);

i++;

}

} catch (FileNotFoundException ex) {

logger.error(ex);

} catch (NullObjectFoundException ex) {

logger.error(ex);

}

return sheetIndex;

}

private boolean validateIndex(int index)

{

if(index < getSheetsIndex().length && index >=0)

return true;

else

return false;

}

public int getNumberOfSheet()

{

int totalsheet=0;

try {

loadFile();

totalsheet=workbook.getNumberOfSheets();

} catch (FileNotFoundException ex) {

logger.error(ex.getMessage());

} catch (NullObjectFoundException ex) {

logger.error(ex.getMessage());

}

return totalsheet;

}

public int getNumberOfColumns(int SheetIndex)

{

int NO_OF_Column=0;XSSFCell cell = null;

XSSFSheet sheet=null;

try {

loadFile(); //load give Excel

if(validateIndex(SheetIndex))

{

sheet = workbook.getSheetAt(SheetIndex);

Iterator rowIter = sheet.rowIterator();

XSSFRow firstRow = (XSSFRow) rowIter.next();

Iterator cellIter = firstRow.cellIterator();

while(cellIter.hasNext())

{

cell = (XSSFCell) cellIter.next();

NO_OF_Column++;

}

}

else

throw new InvalidSheetIndexException("Invalid sheet index.");

} catch (Exception ex) {

logger.error(ex.getMessage());

}

return NO_OF_Column;

}

public int getNumberOfRows(int SheetIndex)

{

int NO_OF_ROW=0; XSSFSheet sheet=null;

try {

loadFile(); //load give Excel

if(validateIndex(SheetIndex))

{

sheet = workbook.getSheetAt(SheetIndex);

NO_OF_ROW = sheet.getLastRowNum();

}

else

throw new InvalidSheetIndexException("Invalid sheet index.");

} catch (Exception ex) {

logger.error(ex);}

return NO_OF_ROW;

}

public String[] getSheetHeader(int SheetIndex)

{

int noOfColumns = 0;XSSFCell cell = null; int i =0;

String columns[] = null; XSSFSheet sheet=null;

try {

loadFile(); //load give Excel

if(validateIndex(SheetIndex))

{

sheet = workbook.getSheetAt(SheetIndex);

noOfColumns = getNumberOfColumns(SheetIndex);

columns = new String[noOfColumns];

Iterator rowIter = sheet.rowIterator();

XSSFRow Row = (XSSFRow) rowIter.next();

Iterator cellIter = Row.cellIterator();

while(cellIter.hasNext())

{

cell = (XSSFCell) cellIter.next();

columns[i] = cell.getStringCellValue();

i++;

}

}

else

throw new InvalidSheetIndexException("Invalid sheet index.");

}

catch (Exception ex) {

logger.error(ex);}

return columns;

}//end of method

public String[][] getSheetData(int SheetIndex)

{

int noOfColumns = 0;XSSFRow row = null;

XSSFCell cell = null;

int i=0;int noOfRows=0;

int j=0;

String[][] data=null; XSSFSheet sheet=null;

try {

loadFile(); //load give Excel

if(validateIndex(SheetIndex))

{

sheet = workbook.getSheetAt(SheetIndex);

noOfColumns = getNumberOfColumns(SheetIndex);

noOfRows =getNumberOfRows(SheetIndex)+1;

data = new String[noOfRows][noOfColumns];

Iterator rowIter = sheet.rowIterator();

while(rowIter.hasNext())

{

row = (XSSFRow) rowIter.next();

Iterator cellIter = row.cellIterator();

j=0;

while(cellIter.hasNext())

{

cell = (XSSFCell) cellIter.next();

if(cell.getCellType() == cell.CELL_TYPE_STRING)

{

data[i][j] = cell.getStringCellValue();

}

else if(cell.getCellType() == cell.CELL_TYPE_NUMERIC)

{

if (HSSFDateUtil.isCellDateFormatted(cell))

{

String formatCellValue = new DataFormatter().formatCellValue(cell);

data[i][j] =formatCellValue;

}

else

{

data[i][j] = Double.toString(cell.getNumericCellValue());

}

}

else if(cell.getCellType() == cell.CELL_TYPE_BOOLEAN)

{

data[i][j] = Boolean.toString(cell.getBooleanCellValue());

}

else if(cell.getCellType() == cell.CELL_TYPE_FORMULA)

{

data[i][j] = cell.getCellFormula().toString();

}

j++;

}

i++;

} // outer while

}

else throw new InvalidSheetIndexException("Invalid sheet index.");

} catch (Exception ex) {

logger.error(ex);}

return data;

}

public String[][] getSheetData(int SheetIndex,int noOfRows)

{

int noOfColumns = 0;

XSSFRow row = null;

XSSFCell cell = null;

int i=0;

int j=0;

String[][] data=null;

XSSFSheet sheet=null;

try {

loadFile(); //load give Excel

if(validateIndex(SheetIndex))

{

sheet = workbook.getSheetAt(SheetIndex);

noOfColumns = getNumberOfColumns(SheetIndex);

data = new String[noOfRows][noOfColumns];

Iterator rowIter = sheet.rowIterator();

while(i

{

row = (XSSFRow) rowIter.next();

Iterator cellIter = row.cellIterator();

j=0;

while(cellIter.hasNext())

{

cell = (XSSFCell) cellIter.next();

if(cell.getCellType() == cell.CELL_TYPE_STRING)

{

data[i][j] = cell.getStringCellValue();

}

else if(cell.getCellType() == cell.CELL_TYPE_NUMERIC)

{

if (HSSFDateUtil.isCellDateFormatted(cell))

{

String formatCellValue = new DataFormatter().formatCellValue(cell);

data[i][j] =formatCellValue;

}

else

{

data[i][j] = Double.toString(cell.getNumericCellValue());

}

}

j++;

}

i++;

} // outer while

}else throw new InvalidSheetIndexException("Invalid sheet index.");

} catch (Exception ex) {

logger.error(ex);

}

return data;

}

please help me to sort out this problem.

Thanks

解决方案

The error is telling you that POI couldn't find a core part of the OOXML file, in this case the content types part. Your file isn't a valid OOXML file, let alone a valid .xlsx file. It is a valid zip file though, otherwise you'd have got an earlier error

Can Excel really load this file? I'd expect it wouldn't be able to, as the exception is most commonly triggered by giving POI a regular .zip file! I suspect your file isn't valid, hence the exception

.

Update: In Apache POI 3.15 (from beta 1 onwards), there's a more helpful set of Exception messages for the more common causes of this problem. You'll now get more descriptive exceptions in this case, eg ODFNotOfficeXmlFileException and OLE2NotOfficeXmlFileException. This raw form should only ever show up if POI really has no clue what you've given it but knows it's broken or invalid.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值