/ / Signature d'en-tête non valide - java, apache-poi

Signature d'en-tête non valide - java, apache-poi

Ici, je veux extraire les données de .xlsx fichier et pour cela j'ajoute déjà le pot poi et créé la référence de 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());
}

}

Ici je reçois l'erreur: -

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)

Réponses:

5 pour la réponse № 1

Commençons par les types de WorkBook.

HSSFWorkbook

C'est l'ancien format Excel propriétaire binaire, connu par l'extension .xls.

XSSFWorkbook

C'est le nouveau format XML Excel, connu sous l'extension .xlsx.

Donc, vous utilisez la mauvaise classe.

En fait, il serait préférable de ne pas utiliser une classe spécifique du tout, laissez le POI déterminer ce que vous avez. Utiliser un WorkbookFactory:

final Workbook workbook = WorkbookFactory.create(excel);

C'est:

  1. programmation à la interface.
  2. robuste aux changements de type de classeur lu, aussi longtemps qu'un POI le prend en charge
  3. plus rapide et plus efficace. POI peut lire le File au coup par coup, quand il le faut plutôt que de devoir mémoriser tout le classeur
  4. N'a pas la fuite de mémoire que vous avez quand vous ne le faites pas close() la FileInputStream.

0 pour la réponse № 2

essayez d'ouvrir le fichier dans Microsoft Office Excelalors un message pop apparaîtra pour vous informer que le fichier que vous essayez d’ouvrir n’est pas un fichier excel, et vous donne le choix de l’ouvrir de toute façon, ouvrez-le et enregistrez-le en tant que fichier Excel.