出现错误“您的 InputStream 既不是 OLE2 流,也不是 OOXML 流";通过 apache POI 创建文件时 [英] Getting error "Your InputStream was neither an OLE2 stream, nor an OOXML stream" when created file through apache POI

查看:47
本文介绍了出现错误“您的 InputStream 既不是 OLE2 流,也不是 OOXML 流";通过 apache POI 创建文件时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to check if my excel file already exists. If it doesn't exists, I want to create a new one and if it exists I will delete it and create a new one. I wrote following program but I am getting error at line - 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)

The error is-> java.lang.IllegalArgumentException: Your InputStream was neither an OLE2 stream, nor an OOXML stream at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:89) at 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();
        }   

推荐答案

不要创建一个空文件并尝试读取它,那是行不通的.空的零字节文件无效,无法加载相反,让 POI 为您创建一个新文件,稍后您将编写该文件.

Don't create an empty file and try to read it, that won't work. An empty zero byte file is not valid, and can't be loaded Instead, have POI create an new file for you, which you will write later.

更改代码:

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();
}

此外,如果您确实想读取现有文件,如果您有文件,请不要使用流!请参阅这一点 POI 文档,了解为什么不这样做.

Also, if you do want to read an existing file, don't use a stream if you have a file! See this bit of the POI docs for why not.

这篇关于出现错误“您的 InputStream 既不是 OLE2 流,也不是 OOXML 流";通过 apache POI 创建文件时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆