Announcement

Collapse
No announcement yet.

PHP und MS-COM (Serienbrief steuern)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • PHP und MS-COM (Serienbrief steuern)

    Hallo erstmal,

    ich hab' ein Problem, was mich inzwischen fast zur Verzweiflung gebracht hat. Es geht darum per PHP (5.2.1) und dessen integrierter COM-Schnittstelle unter Windows, Word 97/2000 zu starten, eine Vorlage (.dot) zu laden und diese mit einer Serienbriefdatenbank zu verknüpfen.

    Also, hab' ich VBA und den Makro-Rekorder bemüht und siehe da, es schien mehr als simpel zu sein. Nun bin ich auf folgenden Code gekommen:

    Code:
    // Word starten
    $word = new COM("word.application", null, CP_UTF8) or die("Konnte Word nicht instantiieren");
    
    //Fenster anzeigen
    $word->Visible = 1;
    
    // neues Dokument öffnen
    $word->Documents->Add($_SERVER['DOCUMENT_ROOT']."\\..\\sebra.dot");
    
    // Serienbrief erstellen per Steuerung
    $word->ActiveDocument->MailMerge->MainDocumentType = 2;
    $word->ActiveDocument->MailMerge->OpenDataSource("..\\export.dbf", 0, false, false, true, false, "", "", false, "", "", "DSN=dBASE-Dateien;DBQ=..;DefaultDir=c:\\temp;DriverId=533;MaxBufferSize=2048;PageTimeout=5;", "SELECT * FROM export.dbf", "");
    
    // Word schließen
    $word->Quit();
    Soweit so gut, doch leider hat der Code einen Haken. Denn Bis auf die Zeile...

    Code:
    $word->ActiveDocument->MailMerge->OpenDataSource("..\\export.dbf", 0, false, false, true, false, "", "", false, "", "", "DSN=dBASE-Dateien;DBQ=..;DefaultDir=c:\\temp;DriverId=533;MaxBufferSize=2048;PageTimeout=5;", "SELECT * FROM export.dbf", "");
    ...funktioniert er nämlich. Nehme ich diese rein bekomme ich folgende Fehlermeldung:

    Fatal error: Uncaught exception 'com_exception' with message 'Parameter 0: Typkonflikt. ' in F:\Sebra\htdocs\test.php:21 Stack trace: #0 F:\Sebra\htdocs\test.php(21): variant->OpenDataSource('..\export.dbf', 0, false, false, true, false, '', '', false, '', '', 'DSN=dBASE-Datei...', 'SELECT * FROM e...', '') #1 {main} thrown in F:\Sebra\htdocs\test.php on line 21
    Naja, dacht ich guckst du doch einfach mal mit com_print_typeinfo($word->ActiveDocument->MailMerge) nach, was er genau haben will, mit folgendem Ergebnis:

    Code:
    	function OpenDataSource(
    		/* VT_BSTR [8] [in] */ $Name,
    		/* VT_PTR [26] [in] --> VT_VARIANT [12]  */ &$Format,
    		/* VT_PTR [26] [in] --> VT_VARIANT [12]  */ &$ConfirmConversions,
    		/* VT_PTR [26] [in] --> VT_VARIANT [12]  */ &$ReadOnly,
    		/* VT_PTR [26] [in] --> VT_VARIANT [12]  */ &$LinkToSource,
    		/* VT_PTR [26] [in] --> VT_VARIANT [12]  */ &$AddToRecentFiles,
    		/* VT_PTR [26] [in] --> VT_VARIANT [12]  */ &$PasswordDocument,
    		/* VT_PTR [26] [in] --> VT_VARIANT [12]  */ &$PasswordTemplate,
    		/* VT_PTR [26] [in] --> VT_VARIANT [12]  */ &$Revert,
    		/* VT_PTR [26] [in] --> VT_VARIANT [12]  */ &$WritePasswordDocument,
    		/* VT_PTR [26] [in] --> VT_VARIANT [12]  */ &$WritePasswordTemplate,
    		/* VT_PTR [26] [in] --> VT_VARIANT [12]  */ &$Connection,
    		/* VT_PTR [26] [in] --> VT_VARIANT [12]  */ &$SQLStatement,
    		/* VT_PTR [26] [in] --> VT_VARIANT [12]  */ &$SQLStatement1 
    		)
    Nu bin ich ehrlich gesagt etwas ratlos, denn es sieht ganz so aus, als läge es am Parameter $Name, der per VT_BSTR verlangt wird. Ich hab' inzwischen versucht, den Parameter per Referenz zu übergeben, per Variablenkonstante, per Variant (Konstante und Referenz) immer das gleiche. Ich weiß echt nicht mehr weiter.

    Wenn irgend jemand eine Idee hat, wo ich etwas dazu heraus bekommen könnte, wäre ich ihm überaus dankbar.

    Tschüss
    Death
Working...
X