ERLEDIGT
NEIN
NEIN
ANTWORTEN
10
10
ZUGRIFFE
1366
1366
EMPFEHLEN
-
Hi,
ich muss sehr große Excel-Dateien generieren. Hierfür habe ich mir diverse Java-APIs angeschaut (POI, OpenXls, JExcel), jedoch ist hier immer das Problem, dass ich um ein Worksheet bearbeiten zu können, die komplette Excel-Datei Streamen muss und hierbei dann einen irre hohen Speicherbedarf habe.
Gibt es die Möglichkeit, jeweils nur ein Worksheet der Excel-Datei zu bearbeiten, sodass man nur diese Daten einlesen und wieder wegspeichern muss?
Oder eventuell noch eine andere API, die das beherrscht?Hallo Nuray!
-
09.09.09 15:58 #2
Hmm ich weiß nciht, welche Anforderungen deine Excel-Seiten haben müssen.
Die einfachste Anfoderung wäre ein Worksheet ohne Fomattierungen. Um das zu erreichen könnte man das Speicherformat *.csv nehmen.
Siehe http://de.wikipedia.org/wiki/CSV_(Dateiformat)
CSV steht für Comma-Separated Values. Die Spalten werden durch ein ; getrennt und jede Zeile ist eine Zeile.
D.h. wenn du beispielsweise folgenden Text (->normale Textverarbeitung) hast:
1;2;3
4;5;6
7;8;9
dann hast du die Felder A1,A2,A3,B1,B2,B3,C1,C2 und C3 belegt.Geändert von HonniCilest (09.09.09 um 16:02 Uhr)
Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.
-
Das reicht mir nicht, ich muss Formatierungen rein bringen.
CSV-Dateien kenne ich. Was eventuell eine Möglichkeit wäre, ist, erst alle "Rohdaten" in einer CSV-Datei zu speichern, die dann nach Excel schieben und dann die xls-Datei zu parsen und formatieren. Dies behebt aber immer noch nicht das Problem, dass ich die Excel-Datei ins Programm komplett laden muss.Hallo Nuray!
-
09.09.09 16:22 #4
Das gleich problem hatte ich auch mal.
Ich bin damals auch auf csv umgestiegen. Aber das scheint wohl niht die Lösung zu sein.Wenn mein Beitrag dir geholfen hat, würde ich mich sehr über eine positive Bewertung oder ein Danke freuen
Gruß Johannes
::: Homepage :::
-
09.09.09 23:28 #5
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
was ist denn genau das Problem? Bekommst du OutOfMemoryErrors?
http://jexcelapi.sourceforge.net/resources/faq/
-> How do I get rid of OutOfMemory exceptions?
Weitere Variante... Open Office Calc Spreadsheets mit UNO automatisieren...
http://www.tutorials.de/forum/java/3...a-via-uno.html
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
10.09.09 08:48 #6
Ich hab mal ein wenig gegoogelt und da haben einige auch
http://www.andykhan.com/jexcelapi/
genannt. Ansonsten schau mal hier:
http://www.rgagnon.com/javadetails/java-0516.html
http://www.moyosoft.com/jec/Geändert von HonniCilest (10.09.09 um 09:05 Uhr)
Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.
-
Hi, erstmal danke für die Antworten.
@Thomas: Ja ich bekomme Out of Memory Exceptions, allerdings auch wenn ich die heap size erhöhe.
Zur Erklärung: Die generierten Excel-Files haben ca. 35 Sheets mit jeweils bis zu 8000 Daten. Auf jeder Seite sind zudem Bilder (Logos) drauf. Bei den Bildern darf ich Abstriche machen, bei den Logos nicht. Und das wird glaube ich mit den APIs immer etwas eng.
Ich habe auch gelesen, dass die APIs grundsätzlich Probleme haben ab ca. 6000 Datensätzen, was bei mir aber bei weitem nicht ausreicht (jeder Datensatz besteht auch 12 Spalten).
Ich suche gerade nach Tutorials zu der JDBC-ODBC Brigde um zu testen, ob ich da die Daten vielleicht rein bekomme, da es dort ja möglich ist, nur einzelne Sheets über SQL anzusprechen, wenn ich es richtig verstanden habe.
Der zweite Link generiert mir aber doch OpenOffice Dokumente oder? Ich bin aber leider gezwungen Excel (2003) Files zu erzeugen.
@Honni:
Die Jexcel Api habe ich schon probiert.
Hast du Erfahrung mit der myosoft API?Hallo Nuray!
-
10.09.09 10:21 #8
Jain, ich hab mal ein wenig rumgespielt, Erfahrung würde ich es nicht unbedingt nennen zudem ich nur die kostenfreie Version genutzt habe.
Was genau möchtest du an deinen Dateien bearbeiten?
Hier mal ein Testcode von mir, der auf einem Codebeispiel von myosoft basiert, von mir ist der Teil mit dem Kopieren einer Zelle. Es funktioniert auch, mich nervt nur immer die Meldung am Anfang, die weißen immer wieder darauf hin, dass es die kostenfreie Version ist.
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
import java.awt.*; import java.io.*; import com.moyosoft.connector.com.*; import com.moyosoft.connector.exception.*; import com.moyosoft.connector.ms.excel.*; public class OpenWorkbook { public static void main(String[] args) { try { FileDialog fileDialog = new FileDialog(new Frame()); fileDialog.setVisible(true); String selectedFile = fileDialog.getFile(); if(selectedFile != null) { // Create the Excel application object Excel excel = new Excel(); try { // Open the selected Excel document Workbook workbook = excel.openWorkbook(new File(fileDialog.getDirectory(), selectedFile)); // Print the workbook name System.out.println("The workbook name is: " + workbook.getName()); Range mySource = excel.getActiveWorkbook().getActiveWorksheet().getCell(0, 0); Range myTarget = excel.getActiveWorkbook().getActiveWorksheet().getCell(0, 1); // Copy A1 to A2, simular to cut() mySource.copy(myTarget); // or only copy value myTarget.setValue(mySource.getValue()); //Show the Excel workbook excel.setVisible(true); } finally { // Dispose the library excel.dispose(); } } } catch (ComponentObjectModelException ex) { System.out.println("COM error has occured: "); ex.printStackTrace(); } catch (LibraryNotFoundException ex) { // If this error occurs, verify the file 'moyocore.dll' is present // in java.library.path System.out.println("The Java Excel Library hasn't been found."); ex.printStackTrace(); } } }
Edit:
Ich finde die API sieht schon sehr vielversprechend für dich aus, zumindest wirkt es auf mich so, dass er die Datei nicht komplett läd, sondern wirklich ein connect aufbaut und über diesen connect auf die Datei zugreift. Das Problem ist wie gesagt nur es ist nicht kostenfrei.
Ich hab auch mal geschaut, weil du meintest du brauchst Formattierungen. Das habe ich zwar nie probiert, aber laut Docs gibt es ua. eine Class CellFormat (oder für deine Grafiken auch die Class Graphics), welche recht vielversprechend aussieht.Geändert von HonniCilest (10.09.09 um 10:51 Uhr)
Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.
-
Ich beschäftige mich gerade mit dem Zerlegen von von Excel-Dateien in einzelne Sheets und anschließendes Wiederzusammenführen. Dazu benutze ich Aspose.Cells. Das klappt recht gut. Ich kann eine Excel-Datei automatisch in einzelne Sheets splitten und diese als Dateien unter sheetname.xls ablegen. Später kann ich sie dann wieder zusammenbauen und in eine Datei speichern. Das klappt soweit.
Allerdings kann die Copy-Worksheet-Methode von Aspose keine Grafiken übernehmen. Nur Zelleninhalte und Styles. Bezüge von Zellen zu anderen Sheets gehen beim Zerlegen natürlich verloren. Um diese zu behalten muß man anders vorgehen. Klappt aber auch, nur darf man das Workbook nicht einmal komplett zuerlegen sondern immer nur ein Sheet zur Bearbeitung herauslösen und nachher unter demselben Namen wieder drüberkopieren.
Hoffe, das hilft Dir irgendwie weiter
Mein kleines selbstgemachtes
Online Quiz freut sich über neue User, Rückmeldungen und Kritik :-)
-
10.09.09 11:32 #10
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
hier mal ein Beispiel für die Manipulation von Excel Dokumenten via JDBC Odbc Bridge
http://www.tutorials.de/forum/java/2...hema-jdbc.html
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Also ich habe auch das Gefühl, dass myosoft bei vielen Daten nicht so schnell ist.
Wie kann ich den beim Insert von Daten über die JdbcOdbc-Bridge die Spalten/Tabellennamen angeben?
Einfach mit Column1 Row1 oder muss man die vorher benennen?Hallo Nuray!
Ähnliche Themen
-
Excel-Datei erstellen und Modul importieren
Von Outsider77 im Forum .NET CaféAntworten: 2Letzter Beitrag: 03.09.10, 09:33 -
[VB2005] Excel Datei erstellen
Von Paperman-Zero im Forum .NET Windows FormsAntworten: 3Letzter Beitrag: 27.09.07, 13:16 -
Excel-Datei aus dem Programm heraus erstellen ...
Von Don Philippo im Forum .NET DatenverwaltungAntworten: 2Letzter Beitrag: 12.09.07, 21:50 -
Excel-Datei erstellen, lesen und schreiben?
Von Erikamania im Forum C/C++Antworten: 4Letzter Beitrag: 29.10.05, 12:47 -
Beliebig große Datei erstellen...
Von CoderX im Forum Visual Basic 6.0Antworten: 4Letzter Beitrag: 08.08.05, 12:06





Zitieren


Login





