NotOLE2FileException: Ungültige header-Signatur; Lesen 0x0000000000000000, erwartet 0xE11AB1A1E011CFD0 - Datei scheint nicht zu einem gültigen OLE2-Dokument
try {
File file = new File("file4.xls");
if (!file.exists()) file.createNewFile();
FileInputStream fis = new FileInputStream(file);
POIFSFileSystem fileSystem = new POIFSFileSystem(fis);
// FileInputStream fis = new FileInputStream(file);
HSSFWorkbook workbook = new HSSFWorkbook(fileSystem);
//Sheet sheet = workbook.createSheet("sheet0");
Sheet sheet = workbook.getSheet("sheet1");
sheet.createRow(0).createCell(0).setCellValue("HelloWorld");
Cell cell = sheet.createRow(1).createCell(0);
cell.setCellValue("Value_1_1");
fis.close();
FileOutputStream fos = new FileOutputStream(file);
workbook.write(fos);
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
Ich versuche zu erstellen einfache excel-Datei mit java. Ich bin immer oben genannten Fehler.
- Gibt es die Datei? Wenn nicht, erstellen Sie es selbst, und dann ist es nicht eine excel-Datei.
- Können Sie versuchen mit Apache-POI-3.14? Das hat verbesserte Fehlermeldungen bei einigen Arten von kaputten Dateien
- Ich löste dieses Problem durch Vermeidung der Verwendung Datei.createNewFile(). Dank RealSkeptic
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein problem ist diese Zeile hier:
Dass eine Marke geschaffen, neue 0 byte-Datei, die keine gültige Excel-Datei. Das ist, warum POI-Objekte.
Auch, du bist eine alte version von Apache POI. Neuere geben eine hilfreiche Ausnahme, wenn Sie sind dumm genug, Sie zu bitten, Lesen Sie eine null-byte-Datei
Unter Berücksichtigung der Beratung auf Dateien vs InputStreams, aber in Anbetracht machst du ein in-place-schreiben, die noch nicht vollständig unterstützt, auf eine geöffnete Datei, ändern Sie Ihren code so:
Die Arbeit wird für beide
.xls
und.xlsx
Dateien, und verhindert, dass die errroAber Sie sollten wirklich aktualisieren Sie Ihre version von Apache POI zu...