1

我也尝试过 POI 版本 1.poi-src-3.9-20121203 和 2.poi-bin-3.10-beta2-20130904

但无法读取 .xls 文件出现以下错误“org.apache.poi.POIXMLException:org.apache.poi.openxml4j.exceptions.InvalidFormatException:包应包含内容类型部分 [M1.13]”

注意:我能够读取 .xlsx 文件。

4

3 回答 3

0

尝试使用org.apache.poi.ss.usermodel.Workbook. 它可用于 .xls 和 .xlsx 文件

Workbook workbook = null;
        if (suffix.equalsIgnoreCase("xls")) {
            workbook = (Workbook) new HSSFWorkbook(new POIFSFileSystem(
                    new FileInputStream(assetFile)));

        } else if (suffix.equalsIgnoreCase("xlsx")) {
            InputStream inp = new FileInputStream(assetFile);
            workbook = new XSSFWorkbook(inp);
            inp.close();
        }
于 2014-02-03T12:07:40.317 回答
0

这是针对 .xlsx

try {            
            // Get the workbook object for XLSX file
            XSSFWorkbook wBook = new XSSFWorkbook(new FileInputStream(path));
            // Get first sheet from the workbook
            XSSFSheet sheet = (XSSFSheet) wBook.getSheetAt(0);
            XSSFRow row;
            XSSFCell cell;
            // Iterate through each rows from first sheet
            Iterator<org.apache.poi.ss.usermodel.Row> rowIterator = sheet.iterator();
                    while (rowIterator.hasNext()) {
                StringBuffer data = new StringBuffer();
                row = (XSSFRow) rowIterator.next();

                // For each row, iterate through each columns
                Iterator<Cell> cellIterator = row.cellIterator();
                int count = 0;
                while (cellIterator.hasNext()) {
                    count++;
                    cell = (XSSFCell) cellIterator.next();

                        if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC)
                        {
                                 data.append(cell.getRawValue()+ ";");
                        }else if(cell.getCellType() == Cell.CELL_TYPE_BOOLEAN)
                        {
                            data.append(cell.getBooleanCellValue() + ";");
                        } else if(cell.getCellType() == Cell.CELL_TYPE_STRING)
                        {
                            data.append(cell.getStringCellValue() + ";");
                        }  
                        else if(cell.getCellType() == Cell.CELL_TYPE_BLANK)
                        {
                            data.append("" + ";");
                        }
                        else
                        {
                            data.append(cell + ";");
                        }
                }
                String finalStr = data.toString().substring(0, (data.length()-1));
               System.out.print(finalStr);
            }

        } catch (Exception ioe) {
            ioe.printStackTrace();
        }

Thia 用于 .xls

try {            
            // Get the workbook object for XLS file
            HSSFWorkbook wBook = new HSSFWorkbook(new FileInputStream(path));
            // Get first sheet from the workbook
            HSSFSheet sheet = (HSSFSheet) wBook.getSheetAt(0);
            HSSFRow row;
            HSSFCell cell;
            // Iterate through each rows from first sheet
            Iterator<org.apache.poi.ss.usermodel.Row> rowIterator = sheet.iterator();
                    while (rowIterator.hasNext()) {
                StringBuffer data = new StringBuffer();
                row = (HSSFRow) rowIterator.next();

                // For each row, iterate through each columns
                Iterator<Cell> cellIterator = row.cellIterator();
                int count = 0;
                while (cellIterator.hasNext()) {
                    count++;
                    cell = (HSSFCell) cellIterator.next();

                        if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC)
                        {
                                 data.append(cell.getRawValue()+ ";");
                        }else if(cell.getCellType() == Cell.CELL_TYPE_BOOLEAN)
                        {
                            data.append(cell.getBooleanCellValue() + ";");
                        } else if(cell.getCellType() == Cell.CELL_TYPE_STRING)
                        {
                            data.append(cell.getStringCellValue() + ";");
                        }  
                        else if(cell.getCellType() == Cell.CELL_TYPE_BLANK)
                        {
                            data.append("" + ";");
                        }
                        else
                        {
                            data.append(cell + ";");
                        }
                }
                String finalStr = data.toString().substring(0, (data.length()-1));
               System.out.print(finalStr);
            }

        } catch (Exception ioe) {
            ioe.printStackTrace();
        }
于 2014-02-03T11:51:38.637 回答
0

您也需要 poi-ooxml 来读取 xlsx 格式。添加此 Maven 依赖项

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.15</version>
</dependency>

对于 xls 使用

Workbook  = new HSSFWorkbook(new FileInputStream(new File("fileName")));

对于 xlsx 使用

Workbook  = workbook = new XSSFWorkbook(new FileInputStream(new File("fileName")));

如果您在阅读之前不知道文件格式,有时查找 .xls 或 .xlsx 文件扩展名可能并不总是足以找到实际的文件格式。在这种情况下,这样做

Workbook workbook;
try {
    workbook = new HSSFWorkbook(new FileInputStream(new File("fileName")));
    System.out.println(" Reading XLS file");
} catch (OfficeXmlFileException e) {
    System.out.println(" Reading XLSX file");
    workbook = new XSSFWorkbook(new FileInputStream(new File("fileName")));
}

休息都是一样的 .xls 和 .xlsx

通过自动检测输入来创建工作簿的更简单方法是

Workbook workbook = WorkbookFactory.create(new File("fileName"));
于 2017-06-05T04:10:19.273 回答