Amerlander: PHP/COM->Word/VBA .CSV einbinden oder Variable definieren

Hallo,
ich erstelle mit PHP eine .csv-Datei, welche dann von PHP aus über die COM Schnittstelle in Word als Serienbriefquelle geladen wird.
Das sieht dann so aus und klappt auch ganz schon:

  
$word=new COM("word.application") or die("Auf dem Server kann nicht auf Word zugegriffen werden");  
$word->visible = 1;  
  
# Vorlage Öffnen  
$word->documents->Open("C:\\\\xampp\\htdocs\\datenbank\\berichtvorlagen\\$dateiname");  
  
# VBA Serienbrief erstellung  
  
# .CSV als Datenquelle Wählen  
$word->Application->Run("csv_einbinden");  
  
# VBA Script zum Serienbrief erstellen  
$word->Application->Run("erstellen_liste");  
  
# felder Aktualisieren (für die Bilder)  
$word->documents[1]->Fields->Update;  
  
# Speichern & Beenden  
$word->documents[1]->saveas("C:\\\\berichte\\$bericht.doc",1);  
$word->ActiveDocument->Close;  
$word->Quit();  
	

VBA:

  
Sub csv_einbinden()  
'  
' CSV Einbinden mit Übergabe der Variablen  
'  
'  
 Dim dateiname As String  
 dateiname = "C:\xampp\htdocs\datenbank\uploads\tmp\1331905709.csv"  
  
    ActiveDocument.MailMerge.OpenDataSource Name:= _  
        dateiname, _  
        ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _  
        AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _  
        WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _  
        Format:=wdOpenFormatAuto, Connection:="", SQLStatement:="", SQLStatement1 _  
        :="", SubType:=wdMergeSubTypeOther  
End Sub

Jetzt würde ich aber gerne den Namen von der .CSV datei Variabel gestalten. Leider hab ich es aber nicht geschafft mittels PHP eine Variable an das VBA Script zu übergeben.

Mein letzter versuch war die beiden Zeilen in PHP vor dem VBA Script aufzurufen und die Entsprechung im VBA Script weg zu lassen:

  
$word->Dim("dateiname As String");  
$word->dateiname="C:\xampp\htdocs\datenbank\uploads\tmp\$meinedatei.csv";

Leider jedoch ohne Erfolg. Das Script bricht an der Stelle einfach ab und PHP macht nicht weiter, also wird auch kein VBA Code mehr ausgeführt.

Der Syntax ist in PHP ja ein etwas anderer als in Word.
Mein Ziel ist es einfach entweder eine Variable in VBA zu definieren, die dann meinem VBA Script "csv_einbinden" zur Verfügung steht (die Variable wird jetzt ja schon definiert, nur bekomme ich sie nicht über PHP definiert und somit ist sie nicht wirklich Variabel)
Oder die Alternative wäre gleich den Aufruf "ActiveDocument.MailMerge.OpenDataSource" in PHP zu machen. Das ich den Punkt in dem Fall mit "->" austauschen muss weiß ich schon mal, allerdings habe ich nicht hin bekommen die anderen werte der Funktion richtig für die PHP COM Schnittstelle umzuschreiben.

  1. $word->dateiname="C:\xampp\htdocs\datenbank\uploads\tmp$meinedatei.csv";

      
    in dieser Zeile gehören die \ natürlich escaped... ändert aber leider nichts an der Problemstellung.
    
    1. Doku

      Die Doku kannte ich noch nicht. Danke dafür. :)

      Hab es jetzt nicht hin bekommen die Variablen mit PHP zu definieren (vielleicht nur deshalb, weil sie dann nur in diesem einen Makro zur verfügung stehen und nicht in einem späteren, so wie ich es gebraucht hätte, da ich ja mit php anschließend ein Makro aufrufen wollte).

      Ich rufe jetzt anstelle des Makros zum einbinden der .csv direkt in php diese zeile auf:
      $word->ActiveDocument->MailMerge->OpenDataSource("C:\\xampp\htdocs\datenbank\uploads\tmp\$var.csv");
      Damit kann ich dann meine .CSV einbinden und mit PHP die bestimmen wie die heißen soll.

      1. Doku

        Die Doku kannte ich noch nicht. Danke dafür. :)

        Hab es jetzt nicht hin bekommen die Variablen mit PHP zu definieren (vielleicht nur deshalb, weil sie dann nur in diesem einen Makro zur verfügung stehen und nicht in einem späteren, so wie ich es gebraucht hätte, da ich ja mit php anschließend ein Makro aufrufen wollte).

        Du kannst deinem Makro Argumente übergeben.

        1. Du kannst deinem Makro Argumente übergeben.

          Direkt in VBA ja, aber ich habe nicht herausgefunden wie der Syntax dazu dann in PHP aussieht, da über die COM Schnittstelle alles ein wenig anders geschrieben wird.
          Da ich von VBA sehr wenig Ahnung habe und von VBA über die COM Schnittstelle steuern noch weniger, konnte ich nur zu ersterem mich belesen und zu letzterem herumprobieren (die Doku über die COM Schnittstelle auf PHP.net ist etwas kurz)

          Wenn du zu speziell diesem Punk (PHP->COM->VBA) mir eine gute Seite nennen kannst, oder gerne auch ein Buch, würde mich das sehr freuen.

          1. Direkt in VBA ja, aber ich habe nicht herausgefunden wie der Syntax dazu dann in PHP aussieht, da über die COM Schnittstelle alles ein wenig anders geschrieben wird.

            Deswegen habe ich dir ja den Link gepostet, dort ist ja die MSWord-COM Schnittstelle beschrieben.
            $word->Application->Run("csv_einbinden", $CVSDateiname);

            Wenn du zu speziell diesem Punk (PHP->COM->VBA) mir eine gute Seite nennen kannst, oder gerne auch ein Buch, würde mich das sehr freuen.

            Du musst dir immer nur die entsprechende Schnittstellenbeschreibung suchen.
            Wenn du keine finden solltest, kannst du dir mit dem OLE-Viewer die IDL-Schnittstellenbeschreibung suchen und hoffen, daß diese gut benannt sind.