Mit PHP Word-Dateien lesen
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
- PHP Manual: COM
http://www.php.net/manual/en/class.com.php
PHP-Dokumentation zur COM-Klasse - 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 - COM: Component Object Model Technologies
http://www.microsoft.com/com/default.mspx
Microsofts Dokumentation zu COM