Apache POI版本3.8是否有助于解决“org.apache.poi.poifs.filesystem.OfficeXmlFileException”?

时间:2014-02-04 13:47:50

标签: java excel apache-poi

我正在使用Apache.POI 3.8版本,它提供错误“提供的数据似乎是在Office 2007+ XML中。您正在调用处理OLE2 Office文档的POI部分。您需要调用另一个处理此数据的POI的一部分(例如XSSF而不是HSSF)“在我从StackExchange获取的以下代码中将HSSF更改为XSSF之后。

public class WritetoExcel {

    private static List<List<XSSFCell>> cellGrid;

    public static void convertExcelToCsv() throws IOException {
        try {

            cellGrid = new ArrayList<List<XSSFCell>>();
            FileInputStream myInput = new FileInputStream("List_U.xlsx");
            POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput);
           // XSSFWorkbook myWorkBook = new XSSFWorkbook(myFileSystem);
            Workbook workbook = null;
            try {
                workbook = WorkbookFactory.create(myInput);
            } catch (InvalidFormatException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            Sheet mySheet = workbook.getSheetAt(0);
            Iterator<?> rowIter = mySheet.rowIterator();

            while (rowIter.hasNext()) {
                XSSFRow myRow = (XSSFRow) rowIter.next();
                Iterator<?> cellIter = myRow.cellIterator();
                List<XSSFCell> cellRowList = new ArrayList<XSSFCell>();
                while (cellIter.hasNext()) {
                    XSSFCell myCell = (XSSFCell) cellIter.next();
                    cellRowList.add(myCell);
                }
                cellGrid.add(cellRowList);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        File file = new File("newFile.csv");
        PrintStream stream = new PrintStream(file);
        for (int i = 0; i < cellGrid.size(); i++) {
            List<XSSFCell> cellRowList = cellGrid.get(i);
            for (int j = 0; j < cellRowList.size(); j++) {
                XSSFCell myCell = (XSSFCell) cellRowList.get(j);
                String stringCellValue = myCell.toString();
                stream.print(stringCellValue + ";");
            }
            stream.println("");
        }
    }

    public static void main(String[] args) {
        try {
            convertExcelToCsv();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Plaese帮助我解决上述错误。

1 个答案:

答案 0 :(得分:2)

该行

POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput);

是问题,如documentation of POIFSFileSystem中所述,它适用于HSSFWorkbook,并且没有提到XSSFWorkbook

您仍然没有在代码中使用它,应将其删除。