POI无法打开工作簿以打开.xls文件,eclipse会抛出异常

use*_*021 0 java database eclipse excel apache-poi

当我尝试在POI中打开.xlsx文件时,我得到一个例外:

  java.lang.IllegalArgumentException: The supplied POIFSFileSystem does not contain a BIFF8      'Workbook' entry. Is it really an excel file? 
        at org.apache.poi.hssf.usermodel.HSSFWorkbook.getWorkbookDirEntryName(HSSFWorkbook.java:223)
        at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:245)
        at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:188)
        at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:170)

InputStream input = new BufferedInputStream( new FileInputStream(fileName));

                            POIFSFileSystem file = new POIFSFileSystem( input );
                            //Create Workbook instance holding reference to .xls file
                            HSSFWorkbook wb = new HSSFWorkbook(file);

                            //Get first/desired sheet from the workbook
                            HSSFSheet sheet = wb.getSheetAt(0);

                        //Iterate through each rows one by one
                        Iterator<Row> rowIterator = sheet.iterator();
Run Code Online (Sandbox Code Playgroud)

只是试图读取.xls文件包含但无法打开它的数据!

rge*_*man 5

不要HSSFWorkbook.xlsx文件上创建.An HSSFWorkbook表示.xls文件,XSSFWorkbook表示.xlsx文件.

事实上,通常你的代码甚至不需要知道它正在使用它.创建你WorkbookWorkbookFactory,就像Busy Developer's Guide中的这个例子所示:

// Use a file
Workbook wb = WorkbookFactory.create(new File("MyExcel.xls"));

// Use an InputStream, needs more memory
Workbook wb = WorkbookFactory.create(new FileInputStream("MyExcel.xlsx"));
Run Code Online (Sandbox Code Playgroud)

如果必须,您可以XSSFWorkbook直接创建:

XSSFWorkbook wb = new XSSFWorkbook(inputStream);  // You can use a FileInputStream
Run Code Online (Sandbox Code Playgroud)

或者用OPCPackage.

OPCPackage pkg = OPCPackage.open(myInputStream);
XSSFWorkbook wb = new XSSFWorkbook(pkg);
Run Code Online (Sandbox Code Playgroud)