.xls in Java lesen und als.txt umwandeln

Von: , Frage gestellt am Do, 1. Sep 2005

Hallo, Jungs
ich habe immer noch keine Lösung für mein Problem.

1.Ich habe dieses Package in mein java projekt kopiert:
poi-2.5.1-final-20040804.jar.

Mein .xls Datei
g1 20 30 40
g2 5 4 2
g3 0.2 0.3 1

erstmal es könnte nur folgendes lesen:
g1 20
g2 5
g3 0.2

Dann nicht mehr und es kommt dieser Fehler:

java.io.IOException: Unable to read entire header; 35 bytes read; expected 512 bytes
at org.apache.poi.poifs.storage.HeaderBlockReader.<init>(HeaderBlockReader.java:78)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:83)
at de.fhw.bi.sag.gui.readExcel.main(readExcel.java:87)


Mein Code ist:


import java.io.FileInputStream;
import java.text.DecimalFormat;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

import org.apache.poi.*;


public class readExcel
{
private static String filename = "D:\\sales.xls";

public static void main(String[] args)
{
try
{

// open the Excel Spreadsheet
POIFSFileSystem fs =
new POIFSFileSystem(new FileInputStream(filename));
HSSFWorkbook hssfworkbook = new HSSFWorkbook(fs);

// grab the first sheet
HSSFSheet sheet = hssfworkbook.getSheetAt(0);

// define objects for housing spreadsheet data
HSSFCell currentStateCell = null;
HSSFCell currentSalesCell = null;
HSSFRow currentRow = sheet.getRow(0);

int rowCount = 0;

// cycle through rows and display cell values
while (currentRow!=null)
{
currentRow = sheet.getRow(rowCount++);
if (currentRow!=null)
{
currentStateCell = currentRow.getCell((short)0);
currentSalesCell = currentRow.getCell((short)1);
}
else break;
//DecimalFormat dc = new DecimalFormat("$###,###.##");
System.out.print(currentStateCell.getStringCellValue() + " - ");
//System.out.println(dc.format(currentSalesCell.getNumericCellValue()));
System.out.println(currentSalesCell.getNumericCellValue());

}

}
catch (Exception e)
{
e.printStackTrace();
}

}
}

Danke für Ihre Hilfe

3 Antworten zu dieser Frage

  1. Antwort von nach einer Stunde 0 hilfreich
    Re: .xls in Java lesen und als.txt umwandeln

    Mein .xls Datei
    g1 20 30 40
    g2 5 4 2
    g3 0.2 0.3 1
    erstmal es könnte nur folgendes lesen:
    g1 20
    g2 5
    g3 0.2
    Weil du in deinem Programm nicht auf die anderen Zellen zugreifst.

    Damit bekommst du alles:

    while...
    System.out.print(currentRow.getCell((short) 0).getStringCellValue() + " - ");
    System.out.print(currentRow.getCell((short) 1).getNumericCellValue());
    System.out.print(currentRow.getCell((short) 2).getNumericCellValue());
    System.out.println(currentRow.getCell((short) 3).getNumericCellValue());
    ...
    Dann nicht mehr und es kommt dieser Fehler:
    java.io.IOException: Unable to read entire header; 35 bytes
    read; expected 512 bytes
    Koennte ein Bug sein. Steht hier allerdings auf "resolved"
    mit dem Hinweis auf Excel:
    http://issues.apache.org/bugzilla/show_bug.cgi?id=31879

    Uebrigens brauchst du das...
    import java.io.FileInputStream;
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.poifs.filesystem.POIFSFileSystem;
    

    ...nur einmal und nicht siebenmal!

    Gruss, Patrick

    • Antwort von nach einer Stunde 0 hilfreich
      Re^2: .xls Versionskonflikt

      Unable to read entire header ...
      Sieht nach einem Versionskonflikt aus:

      > > POI will not support older versions of EXcel. That is the reason
      > > you get that problem,
      > > POI supported documents should start with following charachters
      > > ÐÏࡱá

      http://article.gmane.org/gmane.comp.j...

      Versuch es mal mit einer aelteren POI Version oder speichere
      deine Excel-Datei mit einem neueren Excel.

      Gruss, Patrick

      • Antwort von nach 8 Stunden 0 hilfreich
        Ergänzung

        Neben dem Versionsproblem hatte ich auch Schwierigkeiten mit Excelsdateien die Formeln in den Zellen oder Makros enthielten..... da passierten die merkwürdigsten Dinge.

        Meine Lösung (Und so machen es auch alle Kunden die ihre Exceldaten importieren bei uns wollen): Alles markieren, alles kopieren, neue Datei auf, Inhalte einfügen. Speichern und diese Datei dann in Java einlesen.

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!