无效的标头签名

时间:2014-08-22 13:25:58

标签: java apache-poi

这里我想从.xlsx文件中提取数据,为此我已经添加了poi jar并创建了fileInputStream的引用

package demo;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;


import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class DemoExcel {

    public static void main(String[] args) throws Exception{
        File excel = new File("C:\\Users\\Devaditya\\Documents\\Book1.xlsx");
        FileInputStream fis = null;
        fis = new FileInputStream(excel);
        System.out.println(fis.toString());
        HSSFWorkbook wb = new HSSFWorkbook(fis);
        System.out.println(wb.toString());
        HSSFSheet sh = wb.getSheet("Data");
        System.out.println(sh.toString());
    }

}

我在这里得到错误: -

Exception in thread "main" java.io.IOException: Invalid header signature; read 0, expected -2226271756974174256
    at org.apache.poi.poifs.storage.HeaderBlockReader.<init>(HeaderBlockReader.java:88)
    at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:83)
    at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:210)
    at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:191)
    at demo.DemoExcel.main(DemoExcel.java:23)

2 个答案:

答案 0 :(得分:5)

让我们从WorkBook的类型开始。

<强> HSSFWorkbook

这是旧的二进制专有Excel格式,由扩展名.xls知道。

<强> XSSFWorkbook

这是新的XML Excel格式,扩展名为.xlsx

所以,你使用了错误的课程。

事实上,最好不要使用特定的课程,让POI解决你的问题。使用WorkbookFactory

final Workbook workbook = WorkbookFactory.create(excel);

这是:

  1. programming to the interface
  2. 在POI支持的情况下,对工作簿读取类型的更改具有鲁棒性
  3. 更快更有效率。当需要时,POI可以读取File零碎的内容,而不是将整个工作簿放入内存中。
  4. 当您close() FileInputStream {{1}}时,您没有内存泄漏。

答案 1 :(得分:0)

尝试在microsoft office Excel中打开文件,然后会出现一条弹出消息,通知您正在尝试打开的文件不是excel文件,并且您可以选择以任何方式打开它,因此只需打开它并将其保存为excel文件。