tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
13
ZUGRIFFE
816
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    airBullmer airBullmer ist offline Rookie
    Registriert seit
    Nov 2010
    Ort
    Hamburg
    Beiträge
    8
    Hallo alle zusammen,

    ich habe ein Programm welches mir regelmässig (ca. 30 mal) eine Excel Datei öffnet um ca. 5 Zeilen in diese zu schreiben.
    Nun würde ich gerne ein zuvor erstelltes Sheet (API), welches mit Daten gefüllt ist, meiner Datei hinzufügen, damit ich nur noch auf das Object Sheet zugreifen muss und nicht immer die gesamte Datei öffnen.

    Hat einer eine Idee wie das geht****

    Also am liebsten hätte ich sowas wie:
    Code :
    1
    
    workbook.create((Sheet) meinvoherErstelltesSheet);

    Grüße ausHH
     

  2. #2
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    870
    schau dir mal JOpenDocument http://jopendocument.org/start_spreadsheet_1.html an, damit kann man so etwas machen - und zwar im freien OpenDocument-Format, das neuere Versionen von Microsoft office auch unterstützen müssten.
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  3. #3
    airBullmer airBullmer ist offline Rookie
    Registriert seit
    Nov 2010
    Ort
    Hamburg
    Beiträge
    8
    Hi geno!

    Danke deine Antwort war echt gut! Nur leider für Opendocument, ich bräuchte das ganze aber für die Excel API....sorry, hab ich vergessen zu erwähnen.

    Grüße
     

  4. #4
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    870
    … oder ich habs überlesen
    Da scheint es 2 populäre zu geben:
    JExcelAPI http://jexcelapi.sourceforge.net/ http://www.andykhan.com/jexcelapi/tutorial.html
    und Apache POI http://poi.apache.org/

    hier ein Vergleich: http://www.ordix.de/ORDIXNews/1_2008...i_jakarta.html
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  5. #5
    wakoz wakoz ist offline Mitglied Gold
    Registriert seit
    Apr 2010
    Beiträge
    114
    Aus Persönlicher Erfahrung kann ich POI empfehlen.

    Der Vergleichsartikel ist schon Paar Jahre alt und somit nicht mehr stand der Technik, zum Beispiel gab es Letztes Jahr ein Update bei POI welches den Speicherverbrauch positiv beeinflusste.

    Dennoch der Hinweis es wird einiges an lauf zeit Speicher benötigt, die Standard werte der VM reichen nicht immer, weswegen man diese für eine Anwendung hochstellen sollte.


    zu deiner Frage, Die Excel datei wirst du Offen halten müssen.

    du kannst entweder ein sheet aus dem Dokument (Workbook) öffnen oder für dieses eine seite erzeugen. Ohne ein Offenes Workbook geht da nichts, zumindest kenne ich keine Methode die Ein sheet erzeugt ohne es mit einem Dokument zu verbinden. also ohne Workbook kein Sheet zugriff

    Du hast also Zwei Möglichkeiten:
    Entweder die Daten in einem Mehr Dim. Array Zwischen speichern und zu bestimmten Zeiten rüber ins Excel schreiben oder dein Workbook Öffnen aufhalten während deine Anwendung läuft und du in deinem Sheet schreibst.

    Du musst aber nicht immer dein Workbook öffnen und schließen sinniger wäre es meiner Meinung nach einmal öffnen alles bearbeiten und dann schließen. Schließlich Benötigt das laden und speichern zeit welche je nach Excel Größe schon mal länger dauert was man als User schon bemerken kann.
     

  6. #6
    wakoz wakoz ist offline Mitglied Gold
    Registriert seit
    Apr 2010
    Beiträge
    114
    Ich schreibe es lieber in einem neuen Post

    du könntest mit POI versuchen mit Sheet sheet = <dein Excel Workbook>.getScheet(index) rauszuholen und dann dein Workbook zu schließen

    wenn du fertig bist wird es aber kompliziert, weil wenn du dein WB erneut Öffnest kannst du dein Sheet nicht einfach so adden weil es wie ein neues eingefügt wird und nicht das alte ersetzt ob es eine methode gibt die das sheet ersetzt weiß ich nicht schau dir dazu die Doc an die ist sehr intuitiv.
     

  7. #7
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    870
    Oder du speicherst den Inhalt deines Sheets in regelmäßigen Abständen ab und ersetzt dann die alte Excel-Datei durch die neue:

    Schritte:
    1. inhalt abspeichern in neue Datei
    2. warten (z.B. nach Timer), Daten sammeln
    3. gesamten Inhalt (auch der von 1.) in neue Datei schreiben
    4. alte Datei (von 1.) löschen
    5. neue Datei (von 3.) umbenennen

    das wäre eine konsistente Methode, deine Daten zu speichern - falls der Aufwand es wert ist
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  8. #8
    airBullmer airBullmer ist offline Rookie
    Registriert seit
    Nov 2010
    Ort
    Hamburg
    Beiträge
    8
    @Wakoz
    Du hast also Zwei Möglichkeiten:
    Entweder die Daten in einem Mehr Dim. Array Zwischen speichern und zu bestimmten Zeiten rüber ins Excel schreiben oder dein Workbook Öffnen aufhalten während deine Anwendung läuft und du in deinem Sheet schreibst.
    Ja, so habe ich das jetzt auch als alternativlösung gemacht, das andere hät ich halt schicker gefunden


    Du musst aber nicht immer dein Workbook öffnen und schließen sinniger wäre es meiner Meinung nach einmal öffnen alles bearbeiten und dann schließen. Schließlich Benötigt das laden und speichern zeit welche je nach Excel Größe schon mal länger dauert was man als User schon bemerken kann.
    Gute Idee bin ich gar nicht selbst drauf gekommen, obwohls ja eigentlich offensichtlich ist...trotzdem lass ich jetzt den mehrDim Array

    wenn du fertig bist wird es aber kompliziert, weil wenn du dein WB erneut Öffnest kannst du dein Sheet nicht einfach so adden weil es wie ein neues eingefügt wird und nicht das alte ersetzt ob es eine methode gibt die das sheet ersetzt weiß ich nicht schau dir dazu die Doc an die ist sehr intuitiv.
    Doc hab ich schon durchgemacht, also für alle zur Info es gibt keine Funktion welche ein bereits vorhandenes Sheet durch ein erstelltes ersetzt.


    @geno
    Neee, der Aufwand ist es net Wert und konsistente Daten werden total überbewertet ;


    Grüße und trotzdem Danke!
    Geändert von airBullmer (31.01.11 um 14:45 Uhr)
     

  9. #9
    wakoz wakoz ist offline Mitglied Gold
    Registriert seit
    Apr 2010
    Beiträge
    114
    Zitat Zitat von airBullmer Beitrag anzeigen

    Doc hab ich schon durchgemacht, also für alle zur Info es gibt keine Funktion welche ein bereits vorhandenes Workbook durch ein erstelltes ersetzt.
    Ein WB zu ersetzen kommt einem Überschreiben der Datei gleich, dafür wird keine Funktion benötigt weil das einfach durch erzeugen einer neuen Datei mit dem selben Namen und fomat gleich kommt.

    Was du benötigst ist eine Funktion die mit hilfe des sheet index oder Namen ein bestimmtes sheet Löscht bzw es durch dein neues ersetzt
     

  10. #10
    airBullmer airBullmer ist offline Rookie
    Registriert seit
    Nov 2010
    Ort
    Hamburg
    Beiträge
    8
    mein Fehler wollte Sheet sagen....habs im Text geändert..
     

  11. #11
    wakoz wakoz ist offline Mitglied Gold
    Registriert seit
    Apr 2010
    Beiträge
    114
    Ich Verstehe gerade Überhaupt nicht warum es Im WB keine Methode gibt die ein sheet aufnimmt, vielleicht könntest du dir eine eigene schreiben?

    vielleicht dabei auch ein bestimmtes sheet überschreibt, also genau das tut was du möchtest.
     

  12. #12
    airBullmer airBullmer ist offline Rookie
    Registriert seit
    Nov 2010
    Ort
    Hamburg
    Beiträge
    8
    Tja, wundert mich auch ein bisschen das es sowas nicht gibt.

    Wüsste nicht wie ich es schreiben sollte...Höchstens alle Sheets speichern, Workbook löschen, mein Sheet ersetzen, alle wieder zu neuem Workbook hinzufügen...denk des is bissle overdone...
     

  13. #13
    wakoz wakoz ist offline Mitglied Gold
    Registriert seit
    Apr 2010
    Beiträge
    114
    Es gibt für das WB Eine remove methode mit der du einzelne sheets aus dem wb löschen kannst, alles was dir dann noch fehlt ist halt die methode die dein sheet ins wb übernimmt

    eine Klasse die das HSSFWorkbook oder das ander XSSFWorkbook extendet und um die Methode addsheet erweitert solte reichen wobei du vorher verstehen musst wie das Workbook die einzelnen sheets intern verwaltet
     

  14. #14
    airBullmer airBullmer ist offline Rookie
    Registriert seit
    Nov 2010
    Ort
    Hamburg
    Beiträge
    8
    jup, das müsste ich. Und Neee will ich gar nicht! Mach ich nicht, meine Methode geht auch und sooooo wichtig ist nu auch nicht...
     

Ähnliche Themen

  1. Excel Sheets auslesen
    Von Soilder im Forum Visual Basic 6.0
    Antworten: 17
    Letzter Beitrag: 21.07.10, 12:39
  2. [Excel/VBA] Dynamisch Hyperlinks zu Sheets erstellen
    Von timgkeller im Forum Office-Anwendungen
    Antworten: 3
    Letzter Beitrag: 03.09.08, 09:16
  3. ASP.NET, C#: Excel Sheets einlesen und wieder exportieren
    Von silmepurpurdrache im Forum .NET Web und Kommunikation
    Antworten: 5
    Letzter Beitrag: 28.08.07, 19:36
  4. VBA Excel - Mehrere Sheets kopieren
    Von Doni im Forum Visual Basic 6.0
    Antworten: 3
    Letzter Beitrag: 23.12.04, 17:09
  5. Selektierte Excel-Sheets per Email verschicken
    Von El Schorero im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 13.05.04, 15:15