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.
Ä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.
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.