Klaus Mennward: Felder in Word-Dokument setzen

Hallo,

für eine Studienarbeit habe ich folgendes Problem: ich habe ein bereits erstelltes Worddokument mit einigen Formularfeldern (Checkbox, Textinput). Ich möchte nun per PHP diese Datei einlesen und je nachdem die Felder setzen (Checkboxen je nach Bedarf setzen, Input-Felder dynamisch füllen).

Kennt jemand einen Weg? Meine Recherchen haben mir bisher kein wirklich brauchbares Ergebnis gebracht.

Wäre dankbar für einen Tip.

viele Grüße Klaus

  1. Hallo Klaus Mennward,

    […] Worddokument […] per PHP […] einlesen

    Das kann z.B. PHPWord.

    und je nachdem die Felder setzen (Checkboxen je nach Bedarf setzen, Input-Felder dynamisch füllen).

    Das geht sicher auch, wenn du weißt, wie die entsprechenden Felder heißen.

    Bis demnächst
    Matthias

    --
    Rosen sind rot.
    1. Hallo Mathias,

      herzlichen Dank für diese Information. Damit könnte es wohl gehen. Die Felder haben sicherlich eine ID oder ähliches, das muss ich mal probieren.

      Danke und schönes Wochenende! Klaus

  2. Hallo Klaus,

    die immer gleiche Grundfrage lautet: Welches Problem willst Du EIGENTLICH lösen? Das Ausfüllen der Felder ist sicherlich kein Selbstzweck, was ist der Use-Case? Ist das Ausfüllen der Felder mit PHP der einzige, der beste Weg?

    Zur Technik: mit irgendwelchen Non-Microsoft Tools auf DOCX Dateien herumzuturnen mag funktionieren, birgt aber immer das Risiko von Inkompatibilitäten. Deswegen würde ich das nur als Notlösung sehen wollen.

    Ich habe es noch nicht selbst ausprobiert (weder mit PHP noch sonst einer Sprache als Host), aber wenn dein PHP Script unter Windows läuft und Word auf dem Gerät verfügbar ist, dann es sollte möglich sein, die Word Application als COM Komponente zu instanziieren, darüber die Felder auszufüllen und das Dokument dann COM-gesteuert (ggf. unter neuem Namen) zu speichern. Das ist - gerade unter PHP und ohne entsprechende Interop-Libraries - natürlich eine Menge Fummelei.

    Es kann auch ein Weg sein, ein VBA Makro bereitzustellen, das die Arbeit innerhalb von Word erledigt und das Du über den /m Parameter als Startup-Makro setzt. Du müsstest es entweder im Dokument selbst oder in der Dokumentvorlage unterbringen. Die Frage, wie das Makro an die einzutragenden Daten kommt, ist dann natürlich zu klären; dafür könnte eine Datei dienen.

    Rolf

    --
    sumpsi - posui - clusi
    1. Hallo Rolf,

      die immer gleiche Grundfrage lautet: Welches Problem willst Du EIGENTLICH lösen? Das Ausfüllen der Felder ist sicherlich kein Selbstzweck, was ist der Use-Case? Ist das Ausfüllen der Felder mit PHP der einzige, der beste Weg?

      Ich kann mal erläutern, was passieren soll: Ich habe zahlreiche Word-Dokumente von verschiedenen Laboratorien, die gewisse Formularfelder enthalten. Das Layout dieser Formulare ist komplex, d.h. sicher nicht einfach nachzubauen. Abgesehen davon sind das standadisierte, quasi-amtliche Dokumente, die auch exakt so aussehen müssen. D.h. ein Nachbau ist schwierig und zeitaufwändig.

      Diese Formulare werden mit Daten gefüttert, die in einer DB auf einem Webserver (Open BSD) liegen. Ich kann die Anwendung von daher nicht in einer Windows-Umgebung laufen lassen. Es wäre noch der Weg über Python möglich, andere Sprachen kann ich auch nicht.

      viele Grüße und schönes Wochenende Klaus

      1. Hallo Klaus,

        D.h. ein Nachbau ist schwierig und zeitaufwändig.

        Davon habe ich auch nicht gesprochen. Oder wäre das dein geplanter Fallback gewesen?

        die in einer DB auf einem Webserver liegen

        Dass die DB auf einem Webserver liegt, ist nicht das Problem. Es ist eine Sache der Serverkonfiguration, ob man darauf zugreifen kann. Oder alternativ stellst Du auf dem Webserver ein PHP Script hin, das die Daten geeignet bereitstellt (XML, JSON, CSV). Diese Ausgabe ist nicht für den Browser gedacht, sondern für ein anderes Programm.

        Zum Ausfüllen könntest Du dann auf einem Windows-Gerät ein weiteres PHP Script laufen lassen (z.B. als Command-Line Tool), das auf das Server-PHP zugreift, die Daten holt, parsed und basierend darauf die COM Automatisierung durchführt.

        Das ist natürlich komplex und ein fetter Werkzeug-Stack. Ob das sinnvoll ist, hängt auch davon ab, wie es nach dem Ausfüllen weiter geht. Muss das DOC dann einfach als Datei weitergegeben werden? Muss es gedruckt und versendet werden?

        Wenn PHPWord deinen Zwecken genügt und Dich die Komplexität einer COM Lösung abschreckt, dann mach das, womit Du Dich gut fühlst. Weil - bei der COM Automatisierung stündest Du ziemlich allein da, da kann ich Dir nicht zeigen wie es geht.

        Wenn Du „nur“ PHP und Python kannst, ist die VBA-Idee vermutlich auch nichts für Dich.

        Rolf

        --
        sumpsi - posui - clusi
        1. Hallo Rolf,

          D.h. ein Nachbau ist schwierig und zeitaufwändig.

          Davon habe ich auch nicht gesprochen. Oder wäre das dein geplanter Fallback gewesen?

          Ja, das wäre der Fallback, den wir im Team so besprochen haben. Das wurde mit anderen, einfacheren Dokumente mal so gemacht.

          die in einer DB auf einem Webserver liegen

          Dass die DB auf einem Webserver liegt, ist nicht das Problem. Es ist eine Sache der Serverkonfiguration, ob man darauf zugreifen kann. Oder alternativ stellst Du auf dem Webserver ein PHP Script hin, das die Daten geeignet bereitstellt (XML, JSON, CSV). Diese Ausgabe ist nicht für den Browser gedacht, sondern für ein anderes Programm.

          Zum Ausfüllen könntest Du dann auf einem Windows-Gerät ein weiteres PHP Script laufen lassen (z.B. als Command-Line Tool), das auf das Server-PHP zugreift, die Daten holt, parsed und basierend darauf die COM Automatisierung durchführt.

          Das ist natürlich komplex und ein fetter Werkzeug-Stack. Ob das sinnvoll ist, hängt auch davon ab, wie es nach dem Ausfüllen weiter geht. Muss das DOC dann einfach als Datei weitergegeben werden? Muss es gedruckt und versendet werden?

          Klingt interessant und machbar. Das wäre vermutlich der nächste Schritt, wenn ich phpword nicht weiterkomme. Eine andere Idee wäre noch, das Dokument binär einzulesen und irgendwie den Quellcode zu manipulieren.

          Das hatte ich mal sehr erfolgreich mit ebensolchen amtlichen PDF-Dokumenten gemacht (da durfte das Aussehen GAR nicht verändert werden). War aber eine unglaubliche Fummelei, weil ich mit bis dato mit dem PDF-Format im Detail nicht auskannte. Das ganze ging über Platzhalter bzw. Feldnamen.

          Wenn PHPWord deinen Zwecken genügt und Dich die Komplexität einer COM Lösung abschreckt, dann mach das, womit Du Dich gut fühlst. Weil - bei der COM Automatisierung stündest Du ziemlich allein da, da kann ich Dir nicht zeigen wie es geht.

          Wenn Du „nur“ PHP und Python kannst, ist die VBA-Idee vermutlich auch nichts für Dich.

          VBA hatte ich im Grundstudium, da hab ich diverse Tools entwickelt. Allerdings hab ich mich von der Windows-Welt komplett losgesagt. Von daher, ich kann es zwar prinzipiell, aber hab keine Erfahrung damit. C und C# hätte ich noch, wird aber auch nix bringen? Obwohl C#... hmm? Java hilft mir auch nicht weiter, kann ich auf dem System auch nicht laufen lassen.

          Ich muss es einfach mal mit PHP Word probieren. Danke Rolf!