Toto: Tabelle in Word erstellen

Hallo
ich möchte über die Schnittstelle COM ein Word Dokument öffnen und eine Tabelle erstellen lassen.
Hier mal mein Code:
<?php

$word = new COM("word.application") or die("Unable to instantiate Word");
echo "Loaded Word, version {$word->Version}\n";

$word->Visible = 1;
$word->Documents->Add();

echo "geöffnet";

print "Editing Fields";
 $Field = $word->ActiveDocument->Fields(1);
 $fieldData = $Field->Result;
 $fieldData->Text = "meinTest";

$Field = $word->ActiveDocument->Fields(2);
 $fieldData = $Field->Result;
 $fieldData->Text = "test2";

$word->Documents[1]->SaveAs('C:/test.doc');
$word->Documents[1]->Close();
echo "geschlossen";
$word->Quit();
$word = null;
?>

Das Problem ist, es wird ein Dokument geöffnet aber leider keine Tabelle angelegt. was mache ich falsch??
Vielen Dank
Toto

  1. Hallo,

    ich möchte über die Schnittstelle COM ein Word Dokument öffnen und eine Tabelle erstellen lassen.
    Hier mal mein Code:
    <?php

    $Field = $word->ActiveDocument->Fields(1);

    ^Das ist eine Collection (Auflistung) aller Felder im aktiven Word-Dokument, also solcher Objekte, die man mit dem Menübefehl "Einfügen-Feld" in ein Word-Dokument einfügen kann. Mit einer Tabelle hat das nichts zu tun.

    Das Problem ist, es wird ein Dokument geöffnet aber leider keine Tabelle angelegt. was mache ich falsch??

    Nun, zunächst mal hast Du ein leeres Dokument. Du musst also erst mal eine Tabelle einfügen.

    [VBA]
    Sub Tabelle_in_leeres_Dokument()
        Set mytable = ActiveDocument.Tables.Add(ActiveDocument.Range(), 2, 3)
        mytable.Cell(1, 1).Range.Text = "Name"
        mytable.Cell(1, 2).Range.Text = "Vorname"
        mytable.Cell(1, 3).Range.Text = "Anschrift"
        mytable.Cell(2, 1).Range.Text = "Richter"
        mytable.Cell(2, 2).Range.Text = "Axel"
        mytable.Cell(2, 3).Range.Text = "..."
    End Sub
    [/VBA]

    In PHP wäre das wohl:

    ...
        $mytable = $word->ActiveDocument->Tables->Add(ActiveDocument->Range(), 2, 3)
        $mytable->Cell(1, 1)->Range->Text = "Name"
    ...

    ohne Gewähr.

    Tipp: Erstelle zunächst ein Makro mit Word, indem Du die Aktionen einfach aufzeichnen lässt. Analysiere dann den VBA-Quellcode und setze diesen dann in PHP-COM-Syntax um.

    viele Grüße

    Axel

    1. Hallo,

      In PHP wäre das wohl:

      ...
          $mytable = $word->ActiveDocument->Tables->Add(ActiveDocument->Range(), 2, 3)

      *grr*
             $mytable = $word->ActiveDocument->Tables->Add($word->ActiveDocument->Range(), 2, 3)

      $mytable->Cell(1, 1)->Range->Text = "Name"
      ...

      immer noch ohne Gewähr. ;-))

      viele Grüße

      Axel

      1. Super es hat geklappt.
        Vielen Dank
        Toto