Mit PHP Word-Dateien lesen

Wie man mit PHP Formularfelder einer Word-Datei ausliest

Die Aufgabe

Auf einem Windows™-Server liegen Word™-Dateien mit ausgefüllten Formularfeldern. Die Namen der Formularfelder wechseln in Anzahl und Namen.
Die Informationen dieser Formulare sollen mit PHP weiterverarbeitet werden.

Die Lösung

Voraussetzungen: Wie erwähnt, ein Windows™-Server mit installiertem Word™.
Mit Hilfe der COM-Klasse öffnen wir die Dokumente und lassen uns die Feldnamen und -inhalte aus dem Formular als Array zurückgeben:


<?php
/**
 * array ht_get_word_formfields( str file )
 *
 * oeffnet ueber COM eine Word-Datei und holt
 * alle Felder
 *
 * http://www.hypotext.de/
 *
 */

function ht_get_word_formfields$file )
{
    
$word_formfields = array();

    
// Word starten (muss installiert sein)
    
$word = new COM("word.application")
      or die(
"Kann Word nicht starten!"); # das geht natuerlich auch eleganter

    
$word->Visible 1;

    
$word->Documents->Open$file );

    
# die Felder holen
    
$fields $word->ActiveDocument->FormFields;

    
# Namen und Werte in array packen
    
foreach( $fields as $field )
    {
        
$word_formfields[$field->Name] = $field->Result;
    }

    
# Word schliessen
    
$word->Quit();

    return 
$word_formfields;
}
?>

Fallstricke

Die Dokumentation zur COM-Klasse [1] ist bisher nicht sehr umfangreich, vieles findet man erst durch Trial & Error heraus.
Zu achten ist vor allem auf Probleme bei den Zugriffsrechten, da kommt es auf die Konfiguration des Servers an. [2]

Quellen

  1. PHP Manual: COM
    http://www.php.net/manual/en/class.com.php

    PHP-Dokumentation zur COM-Klasse
  2. Siddharth Venkatesan: Interfacing With COM Objects Under Windows NT/2k/XP
    http://www.phpbuilder.net/columns/venkatesan20030501.php3

    Artikel mit Tutorial zur COM-Konfiguration für den PHP-Zugriff
  3. COM: Component Object Model Technologies
    http://www.microsoft.com/com/default.mspx

    Microsofts Dokumentation zu COM