获取错误"您的InputStream既不是OLE2流,也不是OOXML流"通过apache POI创建文件时

时间:2015-03-24 15:15:09

标签: java excel apache-poi xssf poi-hssf

我正在尝试检查我的excel文件是否已存在。如果它不存在,我想创建一个新的,如果它存在,我将删除它并创建一个新的。我编写了以下程序,但我收到了错误 - workbook = WorkbookFactory.create(instream);

错误是 - > java.lang.IllegalArgumentException:您的InputStream既不是OLE2流也不是OOXML流     在org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:89)     在tryIng.main(tryIng.java:84)

这是一个程序 - >

 try {
                String filePath= "C:/Users/pritik/Desktop/t1.xlsx";
                File file = new File(filePath);
                filePath= file.getAbsolutePath(); 
                xlFile = new File(filePath);

                if(xlFile.exists() && !xlFile.isDirectory())
                    xlFile.delete(); //delete if file already exists.
                xlFile.createNewFile();

                inStream = new FileInputStream(xlFile);
                workbook =  WorkbookFactory.create(inStream);  // I get error at this line
                String sheetName="NewSheet";
                Sheet sheet = workbook.createSheet(sheetName);
                FileOutputStream fOut = new FileOutputStream(xlFile);

                int i,j;
                xRows = xTS.length;
                xCols = xTS[0].length;
                for(i =0;i<xRows;i++)
                {
                    row = sheet.createRow(i);
                    for(j=0;j<xCols;j++)
                    {
                        cell = row.createCell(j);
                        cell.setCellType(Cell.CELL_TYPE_STRING);
                        cell.setCellValue(xTS[i][j]);
                    } 
                } 
                workbook.write(fOut);
                fOut.flush();
                fOut.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   

1 个答案:

答案 0 :(得分:6)

不要创建一个空文件并尝试阅读它,这不会起作用。空零字节文件无效,无法加载而是让POI为您创建一个新文件,稍后您将编写该文件。

更改代码:

if(xlFile.exists() && !xlFile.isDirectory())
    xlFile.delete(); //delete if file already exists.
xlFile.createNewFile();

inStream = new FileInputStream(xlFile);          
workbook =  WorkbookFactory.create(inStream);

改为:

if(xlFile.exists() && !xlFile.isDirectory())
    xlFile.delete(); //delete if file already exists.

if (xlFile.toString().endsWith(".xls") {
   workbook = new HSSFWorkbook();
} else {
   workbook = new XSSFWorkbook();
}

此外,如果您确实想要阅读现有文件,如果您有文件,请不要使用流!有关原因,请参阅this bit of the POI docs