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.