Ankündigung

Einklappen
Keine Ankündigung bisher.

MYSQL-Daten Export in Word-Vorlage mit Textmarken

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MYSQL-Daten Export in Word-Vorlage mit Textmarken

    Hi,
    will Daten aus einer mysql-Datenbank in eine Word-Vorlage exportieren.
    Ich hab schon einiges gegoogelt, leider ohne eine konkrete Lösung zu finden.

    Ziel ist es:
    Eine am Server gespeicherte Word-Vorlage soll mit MYSQL-Daten UND Bildern (die am Web-Server liegen) gefüllt werden.
    D.h. ein User gibt Daten ein und läd Bilder hoch, danach soll z.B. ein Expose erstellt werden.

    Ich steh vor 3. Problemen:
    1.) Wie muss die Word-Vorlage erstellt sein, damit z.B.Textmarken korrekt befüllt werden, die Bilder könnten z.B.in einer Tabelle stehen.

    2.) Wie spreche ich mit PHP die Word-Vorlage an und ersetze den Inhalt der Textmarken mit den Daten.

    3.) Wie öffne ich die erstellte Datei direkt in Word.

    Ein Export als PDF kommt nicht in Frage, da die Datei auch geändert werden können soll.

    Freu mich auf eure Tipps!

    Grüße


  • #2
    Hallo,
    du kannst versuchen ein einfacheres Dateiformat zu verwenden (RTF, HTML, Office Open XML, ..). Das ist zwar nicht .DOC, aber kann trotzdem von Word gelesen werden.

    Vielleicht wirst du sonst hier fuendig:
    PHP: COM and .Net (Windows) - Manual
    "Mein Name ist Lohse, ich kaufe hier ein."

    Kommentar


    • #3
      Danke für den Tipp, dass eine dort vorhandene Beispiel hat zwar nicht geklappt (sicher mein Fehler aber ich habe zumindest dadruch ein funktionierentes Script für Text gefunden.

      Da ich nun auch Bilder ins Word einfügen will, hoffe ich Ihr könnt mir damit helfen.

      Poste hier mal den Link zum Original-Script:
      Tutorial und Beispiele mit PHP und Word-Automatisierung (COM)

      Daraus habe ich mir die Class entnommen, hier ein Teil des Codes der Class:

      PHP-Code:
        function Build($p_sTemplate null$p_sDokument null$p_aBookmarks = array()) {
         
         
      // VARIANTs erzeugen
         
      $this->vTemplate = new VARIANT($p_sTemplateVT_BSTR);
         
      $this->vDokument = new VARIANT($p_sDokumentVT_BSTR);    
         
         
      // 'optische' Meldungen von Word abschalten
         
      $this->oWord->DisplayAlerts false;
         
      $this->oWord->ScreenUpdating false;   
         
         
      // Dokuments-Objekt (Achtung: Mehrzahl)
         
      $oWordDocs $this->oWord->Documents();
         
         
      // ein neues Dokument (.DOC) aus der Vorlage (.DOT) erzeugen (Achtung: Einzahl)
         
      $oWordDoc $oWordDocs->Add($this->vTemplate);
         
         
      // Bookmarks-Objekt (Achtung: Mehrzahl)
         
      $oBookmarks $oWordDoc->Bookmarks();   
         
         
      // Anzahl Bookmarks im neuen Dokument ermitteln 
         
      $nAnzBookmarks $oBookmarks->Count();    
         
         
      // Die vorhandenen Bookmarks in einer Schleife durchlaufen und füllen
         
      for ($i=1;$i<=$nAnzBookmarks;$i++) {
          
          
      $this->vIndex $i
          
      $oBookmark $oBookmarks->Item($this->vIndex);
          
          
      // wie ist der Name dieser Textmarke (Bookmark)?
          
      $sName $oBookmark->Name(); 
          
          
      // soll diese Textmarke gefüllt werden?
          
      if (array_key_exists($sName,$p_aBookmarks)) {
          
           
      // Rangeobjekt zur Textmarke navigieren (goto) und den Wert einsetzen
           
      $oWordRange $oBookmark->Range(); 
           
      $this->vName $sName;
           
      $oWordRange $oWordRange->Goto($this->vWhat,$this->vOptional,$this->vOptional,$this->vName); 
           
      //
           // ZUM TESTEN habe ich ihn hier angewiesen, an der Stelle
           // für BOOKMARK / TEXTMARKE "bild1" den Inhalt der Zwischenablage z.B. eine Grafik einzufügen,
           // dass klappt nur müsste ich hier noch eine Grafik, die am Server liegt einfügt werden
           //
           
      if ($this->vName == "bild1") { // bild1 steht hier mal zu Testzwecken
              
      $oWordRange->Paste;
           } else {
              
      $oWordRange->Text $p_aBookmarks[$sName]; 
           }
          }
         } 
      Wie ihr sehen könnt klappt es eine einzlene Grafik aus dem Zwischenspeicher in das Word zu bringen.
      Jetzt wäre es toll wenn man an der Stelle auch eine Grafik über einen Link direkt vom Server einfügen könnte.

      Alle Versuche mit INCLUDEPICTURE
      oder z.B.: InlineShapes.AddPicture FileName:="C:\xxx.jpg", _LinkToFile:=False, SaveWithDocument:=True
      sind aufgrund einer falscher Syntax oder Befehl fehlgeschlagen.

      Könnte mir auch vorstellen an der Stelle des Bookmark ein "Feld" einzufügen, dass Word anweisst, eine Grafik über eine URL zu laden.

      Hoffe es hat einer von Euch eine Idee

      Grüße

      Kommentar


      • #4
        Ich hab damit keine Erfahrung tut mir Leid, aber lass es mich wissen wenn du eine Loesung gefunden hast.

        Beachte uebrigens, dass das Skript vermutlich nur auf Windows-Servern laeuft, falls dein Skript also Live auf einer Unix-Maschine laufen soll, bist du gearscht
        "Mein Name ist Lohse, ich kaufe hier ein."

        Kommentar


        • #5
          Es klappt auf dem Unix-Server leider nicht, wäre auch zu schön gewesen.

          Natürlich hab ich inzwischen nach weiteren Methoden gesucht, habe aber nichts gefunden, ausser vielleicht den Weg über das RTF-Format.

          Sollte jemand von Euch was einfallen würde es mich freuen
          oder einen Weg/Möglichkeit kennen, würde es mich sehr freuen davon zu hören!

          Vielen Dank!

          Kommentar


          • #6
            Wenn du aber "irgendwo" einen Windows-Server hast, kannst du den als Web-Service-Provider benutzen.
            "Mein Name ist Lohse, ich kaufe hier ein."

            Kommentar

            Lädt...
            X