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 № 1Vamos a empezar con los tipos de WorkBook
.
Este es un antiguo formato binario de Excel propietario, conocido por la extensión. .xls
.
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:
- programando al
interface
. - robusto a los cambios en el tipo de libro de trabajo, siempre que un PDI lo admita
- 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. - No tiene la pérdida de memoria que tiene cuando no la tiene
close()
elFileInputStream
.
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.