/ / Invalid Header Signature - ジャワ、apache-poi

ヘッダー署名が無効です - java、apache-poi

ここからデータを抽出したい .xlsx ファイルとそのために私はすでにポイの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)

回答:

回答№1は5

の種類から始めましょう WorkBook.

HSSFWorkbook

これは古いバイナリ独自のExcelフォーマットで、拡張子で知られています .xls.

XSSFWorkbook

これはエクステンションで知られる新しいXML Excelフォーマットです。 .xlsx.

だから、あなたは間違ったクラスを使っています。

実際には、特定のクラスをまったく使用しないほうが良いでしょう。POIが自分の持っているものを解決しましょう。使う WorkbookFactory

final Workbook workbook = WorkbookFactory.create(excel);

これは:

  1. へのプログラミング interface.
  2. POIがサポートしている限り、読まれるワークブックの種類の変更に対して堅牢
  3. より速くより効率的です。 POIを読むことができます File ワークブック全体をメモリに丸め込む必要があるのではなく、必要であるとき。
  4. していないときに持っているメモリリークはありません close() その FileInputStream.

回答№2の場合は0

マイクロソフトオフィスのExcelでファイルを開こうとするすると、ポップしようとしているファイルがExcelファイルではないことを知らせるポップメッセージが表示されます。開いて、Excelファイルとして保存するだけです。