Forum: PC-Programmierung Excel Java Fehler mit BiffViewer


von Jan S. (jannemann)


Angehängte Dateien:

Lesenswert?

Hallo,
ich möchte eine Excel Datei (am besten ab excel2003 *.xlsx) in Java 
öffnen, ändern und speichern.
Bisher habe ich die "Apache POI" und "Java Excel API" (JExcel) 
ausprobiert bei beiden Libraries bekomme ich Fehlermeldungen, die mit 
dem BiffViewer zu tun haben. Soweit ich mich bis jetzt eingelesen habe 
ist der Biff-Viewer doch mehr eine Art Debugg-Werkzeug, welches ich 
eigentlich garnicht nutzen möchte.
Ich entwickle mit Eclipse.

Zu meinen Fehlern:

1) JExcel API
Ich habe die jxl.jar Library eingebunden und das den Quellcode von 
http://www.tutorials.de/java/267257-kleines-beispiel-zur-jexcel-api.html 
eingefügt. Nun bekomme ich die Fehlermeldung wie im Bild JExcel zu sehen 
"Lunching BiffViewer has encountered a problem" Das einzige was ich an 
dem Quellcode geändert habe ist, dass ich den Pfad für die Quelldatei 
geändert habe.

2) Apache POI
Hier habe ich mittlerweile alle Kombinationen einmal durch und 
mittlerweile (aus Verzweiflung) auch viel mehr eingebunden als nötig 
wäre. (siehe Bild poi.png)
Den Quellcode hierzu habe ich von http://blog.rasc.ch/?p=579
Hier bekomme ich die Konsolenausgabe wie sie ebenfalls im Bild zu sehen 
ist.
Die in der Vorlage gezeigten Beispiele habe ich schon einzeln 
durchprobiert, das Ergebnis ist das selbe. Immer die gleiche 
Konsolenausgabe. Die Excel-Datei habe ich hier im Projektverzeichnis.

Beide Projekte werden ohne Fehler/Warnungen kompiliert und in beiden 
Fällen habe ich mittlerweile xls und xlsx dateien ausprobiert.

Meine Motivation und mein Latein sind langsam am Ende....
Es wäre schön, wenn sich das jemand mit etwas mehr Erfahrung mal 
angucken könnte.

Viele Grüße Jan

Edit: Ohne Fragen, kanns natürlich auch keine Antwort geben.
Sind die beschriebenen Fehlerbilder jemandem bekannt? Kann ich den 
BiffViewer irgendwie ausschalten? Oder könnte der Quellcode doch 
fehlerhaft sein? Was mich wundert ist, dass bei der POI-Anwendung in der 
Konsolenausgabe von jre7 die Rede ist, meine Entwicklung doch aber unter 
dem jdk1.7 läuft.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Äh... es wäre wohl sinniger gewesen mal deine Quellcodes zu posten... 
Ansosnten schreib doch die resultierende XLS Datei einfach mal auf die 
Platte und versuche sie mit Excel/OO zu öffnen was du mit dem BiffViewer 
willst ist mir schleierhaft.

von Jan S. (jannemann)


Lesenswert?

Hallo Läubi,
hier kommen die Quellcodes, ich hoffe sie helfen dir/dem Forum weiter.

1)JExcel API
1
import java.io.File;
2
import java.util.Date;
3
 
4
import jxl.Workbook;
5
import jxl.write.DateFormats;
6
import jxl.write.DateTime;
7
import jxl.write.Label;
8
import jxl.write.Number;
9
import jxl.write.NumberFormats;
10
import jxl.write.WritableCellFormat;
11
import jxl.write.WritableSheet;
12
import jxl.write.WritableWorkbook;
13
 
14
/**
15
 * @author Tom
16
 * 
17
 */
18
public class excel{
19
 
20
    /**
21
     * @param args
22
     */
23
    public static void main(String[] args) throws Exception {
24
 
25
        WritableWorkbook workbook = Workbook.createWorkbook(new File(
26
                "D:/Software/Eclipse/test.xlsx"));
27
        WritableSheet testSheet = workbook.createSheet("test", 0);
28
        int currentColumn = 0;
29
        int currentRow = 0;
30
 
31
        WritableCellFormat numberFormat = new WritableCellFormat(
32
                NumberFormats.FLOAT);
33
        Number number = new Number(currentColumn++, currentRow, 12345.0,
34
                numberFormat);
35
        testSheet.addCell(number);
36
 
37
        testSheet.addCell(new Label(currentColumn++, currentRow, "TEST"));
38
 
39
        WritableCellFormat dateFormat = new WritableCellFormat(
40
                DateFormats.DEFAULT);
41
        DateTime dateCell = new DateTime(currentColumn++, currentRow,
42
                new Date(), dateFormat);
43
        testSheet.addCell(dateCell);
44
 
45
        workbook.write();
46
        workbook.close();
47
    }
48
}
Hier habe ich es bereits mit xlsx und xls Dateien versucht

2) Apache POI
1
import java.io.File;
2
import java.io.FileInputStream;
3
import org.apache.poi.hssf.usermodel.HSSFCell;
4
import org.apache.poi.hssf.usermodel.HSSFRow;
5
import org.apache.poi.hssf.usermodel.HSSFSheet;
6
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
7
import org.apache.poi.ss.usermodel.Cell;
8
import org.apache.poi.ss.usermodel.Row;
9
import org.apache.poi.ss.usermodel.Sheet;
10
import org.apache.poi.ss.usermodel.Workbook;
11
import org.apache.poi.ss.usermodel.WorkbookFactory;
12
import org.apache.poi.xssf.usermodel.XSSFCell;
13
import org.apache.poi.xssf.usermodel.XSSFRow;
14
import org.apache.poi.xssf.usermodel.XSSFSheet;
15
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
16
 
17
public class excel {
18
  public static void main(String[] args) throws Exception {  
19
    //Läuft das Programm überhaupt?
20
    System.out.println("START\n");
21
22
    /*--------------------------------------------*/
23
    /* HSSF                                       */
24
    /*--------------------------------------------*/  
25
    //Libraries: poi-3.5-beta6-20090622.jar
26
27
//a
28
/*  
29
    File excelFile = new File("test.xls");
30
    FileInputStream fis = new FileInputStream(excelFile);
31
    HSSFWorkbook hwb = new HSSFWorkbook(fis);
32
 
33
    HSSFSheet hsheet = hwb.getSheetAt(0);
34
    HSSFRow hrow = hsheet.getRow(1);
35
    HSSFCell hcell = hrow.getCell(0);
36
    System.out.println(hcell.getStringCellValue());  
37
    fis.close();*/
38
    
39
    
40
    /*--------------------------------------------*/
41
    /* XSSF                                       */
42
    /*--------------------------------------------*/  
43
    //Libraries: poi-3.5-beta6-20090622.jar
44
    //           ooxml-schemas-1.0.jar
45
    //           poi-ooxml-3.5-beta6-20090622.jar
46
    //           xmlbeans-2.3.0.jar
47
    //           dom4j-1.6.1.jar
48
//b
49
/*  
50
    XSSFWorkbook xb = new XSSFWorkbook("test.xlsx");
51
    XSSFSheet xsheet = xb.getSheet("Sheet1");
52
    XSSFRow xrow = xsheet.getRow(1);
53
    XSSFCell xcell = xrow.getCell(0);
54
    System.out.println(xcell.getStringCellValue());*/
55
    
56
  
57
    /*-------------------------------------------*/
58
    /* New, generic SS Usermodel Code            */
59
    /*-------------------------------------------*/
60
    //Libraries: poi-ooxml-3.5-beta6-20090622.jar
61
    //           poi-3.5-beta6-20090622.jar
62
//c
63
/*  
64
    excelFile = new File("test.xls");
65
    fis = new FileInputStream(excelFile);
66
    Workbook wb =  WorkbookFactory.create(fis);
67
    Sheet sheet = wb.getSheetAt(0);
68
    Row row = sheet.getRow(1);
69
    Cell cell = row.getCell(0);
70
    System.out.println(cell.getStringCellValue());
71
    fis.close();*/
72
    
73
 
74
    //Libraries: poi-3.5-beta6-20090622.jar
75
    //           ooxml-schemas-1.0.jar
76
    //           poi-ooxml-3.5-beta6-20090622.jar
77
    //           xmlbeans-2.3.0.jar
78
    //           dom4j-1.6.1.jar  
79
//d
80
    
81
    excelFile = new File("test.xlsx");
82
    fis = new FileInputStream(excelFile);
83
    wb =  WorkbookFactory.create(fis);
84
    sheet = wb.getSheetAt(0);
85
    row = sheet.getRow(1);
86
    cell = row.getCell(0);
87
    System.out.println(cell.getStringCellValue());
88
    fis.close();
89
    
90
    //Läuft das Programm überhaupt?
91
    System.out.println("ENDE\n");
92
  }
93
}

Die mit a, b, c und d gekennzeichneten Modelle habe ich mittlerweile 
alle einzeln sowie in der Kombination ad, bd, und cd ausprobiert.

------

Die erstellten Excel Dateien haben hinterher den selben Inhalt wie 
zuvor. Ich habe auch schon versucht mir in Bsp 1) eine neue Datei 
erzeugen zu lassen, aber auch dabei läuft das Programm garnicht erst an.

Der BiffViewer ist genau mein Problem, wenn ich den Referenz-Guide 
richtig verstanden habe ist der doch an dieser Stelle auch garnicht 
nötig. Ich will ihn auch eigentlich garnicht benutzen, aber in 
irgendeiner Stelle wird er scheinbar aufgerufen und ich weiß nicht 
warum. Meiner Meinung nach wird er in einer der Bibliotheken verwendet, 
ohne dass ich es will. Kann ich ihn irgendwo ausschalten?

Ich finde leider auch nirgends ein lauffähiges Beispiel an dem Ich mich 
langhangeln kann, um mich in eines der Pakete einzuarbeiten.

Vielen Dank schonmal!

von Jan S. (jannemann)


Lesenswert?

Glaube ich habs..
Hatte wohl nen falschen Einstiegspunkt. In einer der Libs muss noch ne 
Main-Funktion versteckt sein. Die wollte der Debugger ausführen.
Falls ich noch noch mal Probleme bekomme melde ich mich.
Ansonsten Danke für die investierte Zeit!!!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.