/ / Firma de encabezado no válida - java, apache-poi

Firma de encabezado no válida - java, apache-poi

Aquí quiero extraer los datos de .xlsx Archivo y para eso ya agregué el tarro poi y creé la referencia 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());
}

}

Aquí estoy recibiendo el error: -

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)

Respuestas

5 para la respuesta № 1

Vamos a empezar con los tipos de WorkBook.

HSSFWorkbook

Este es un antiguo formato binario de Excel propietario, conocido por la extensión. .xls.

XSSFWorkbook

Este es el nuevo formato XML Excel, conocido por la extensión. .xlsx.

Entonces, estás usando la clase equivocada.

De hecho, sería mejor no utilizar una clase específica, deje que POI resuelva lo que tiene. Utilizar una WorkbookFactory:

final Workbook workbook = WorkbookFactory.create(excel);

Esto es:

  1. programando al interface.
  2. robusto a los cambios en el tipo de libro de trabajo, siempre que un PDI lo admita
  3. Más rápido y más eficiente. POI puede leer el File Poco a poco, cuando es necesario en lugar de tener que arrastrar todo el libro en la memoria.
  4. No tiene la pérdida de memoria que tiene cuando no la tiene close() el FileInputStream.

0 para la respuesta № 2

Intenta abrir el archivo en Microsoft Office Excel.luego aparecerá un mensaje emergente para informarle que el archivo que está intentando abrir no es un archivo de Excel, y le da la opción de abrirlo de cualquier manera, así que solo ábralo y guárdelo como archivo de Excel.