Использование COM для открытия Word

На самом деле я пробую некоторые коды, которые я нашел на http://php.net/manual/en/class.com.php

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

    //bring it to front
    $word->Visible = 1;

    //open an empty document
    $word->Documents->Add();

    //do some weird stuff
    $word->Selection->TypeText("This is a test...");
    $word->Documents[1]->SaveAs("Useless test.doc");


    //closing word
    $word->Quit();

    //free the object
    $word = null;
    ?> 

Но это, похоже, не работает. Я использую Word 2007, и я получаю следующее:

Загружен Word, версия 12.0 Неустранимая ошибка: вызов неопределенного метода variant::SaveAs() в C:\xampp\htdocs\final\testq.php в строке 14

Кто-нибудь может решить эту проблему? Это потому, что я использую Word 2007?


person chupinette    schedule 24.03.2010    source источник


Ответы (3)


Объект Documents является объектом Collection, а не массивом. Пытаться:

$word->Documents(1)->SaveAs("Useless test.doc");

Or

$word->ActiveDocument->SaveAs("Useless test.doc");
person Andy E    schedule 24.03.2010
comment
@chupinette: попробуй $word->ActiveDocument->SaveAs("Useless test.doc"); - person Andy E; 24.03.2010

Ваш образец отлично работает для меня как с Word 2003, так и с Word 2007 в Windows 7. Поэтому я предполагаю, что проблема может быть в неправильно установленном/настроенном Word. Для устранения неполадок выполните следующие действия:

  • восстановить установку Word
  • убедитесь, что Word был запущен хотя бы один раз от имени того же пользователя, под которым запускается ваш скрипт
  • отключить все надстройки
  • перейдите к %APPDATA%\Microsoft\Templates\ и переименуйте файл Normal.dot(x)
  • убедитесь, что у вас действительно есть права на сохранение файлов в указанное место, попробуйте указать абсолютный путь
person Dirk Vollmar    schedule 24.03.2010
comment
Как отключить все надстройки? Я нашел обычный файл, который является шаблоном с поддержкой макросов. На какое имя мне его переименовать? Спасибо за вашу помощь - person chupinette; 24.03.2010
comment
Просто сделайте резервную копию Normal.dot(x) или удалите ее. Вы можете отключить надстройки по одной с помощью кнопки Office -> Параметры Word -> Надстройки, затем выберите тип надстройки в поле со списком и нажмите Перейти... - person Dirk Vollmar; 24.03.2010
comment
PHP 5.3.1 и я использую Windows Vista - person chupinette; 24.03.2010
comment
Я провел тест на 5.3.2 в Windows 7, если это имеет значение. - person Dirk Vollmar; 24.03.2010
comment
Вы предлагаете мне перейти на 5.3.2? - person chupinette; 24.03.2010

Я решил это, используя: /а>? Спасибо за ваши ответы

person chupinette    schedule 25.03.2010