Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как заставить корректно работать COM (Word) 
:(
    Опции темы
webbear
Дата 26.1.2006, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 26.1.2006

Репутация: нет
Всего: нет



Ситуация следующая...
Есть 2 скрипта использующие COM.
В одном файл просто открывается и сохраняется в нужном формате. В другом он должен парсить букмарки...
И тут-то начинается самое интересное.
Коректно скрипт отработал только один раз.
Потом ступор...

Скрипт просто виснет... Причём не спасает никакой таймлимит... Только при ручном завершении процесса Ворда на сервере выдаётся

Warning: (null)(): Invoke() failed: Сбой при удаленном вызове процедуры

... в строке открытия где файл должен открываться.

Во первых: немного не понятна логика работы... Т.е. каким образом застраховать себя от подобного зависания. Как заставить СОМ контролировать выполнение.

На всякий случай привожу пример кода

Код

  $word = new COM("word.application") or die("Unable to instantiate Word");
  if($word->Documents->Open($new_doc)){
    foreach($_INC AS $key=>$val){
      $objBookmark = $word->ActiveDocument->Bookmarks($key);
      $range = $objBookmark->Range;
      $range->Text = $val;
    }
    $word->Documents[1]->Save();
    $word->Quit();
    $word->Release();
  }else{
    dprint("Error while opening file");
  }
  $word = null;




PM MAIL   Вверх
AntonioBanderaz
Дата 26.1.2006, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 18



Код

<?php
set_time_limit(0);
error_reporting(E_ALL);
$empty = new VARIANT();
com_load_typelib('Word.Application'); //ОБРАТИ ВНИМАНИЕ!!!!
$word = new COM('word.application') or die('Unable to load Word');
$word->Documents->Open('C:/Unfilled.DOC');
$word->Selection->GoTo(wdGoToBookmark,$empty,$empty,'КАК ПЕРЕЙТИ НА МЕТКУ');
$word->Selection->TypeText("SOME TEXT");
$word->Documents[1]->SaveAs("C:/имя файла.doc");
$word->Quit();
$word->Release();
$word = null;
?>

Проверил всё работает...


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
webbear
Дата 27.1.2006, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 26.1.2006

Репутация: нет
Всего: нет



Решение нашлось само...
Чисто импирическим методом...

Оказывается COM::Word очень не хочется открывать файлы имя которых заканчивается на знак "_" - нижнее подчёркивание...

Да...
Но попрежнему остаётся нерешённым вопрос как остановить процесс СОМ....

Если процесс завис, то остановить его можно только сняв процесс в диспетчере задач...

Может есть какие-либо идеи?

Это сообщение отредактировал(а) webbear - 27.1.2006, 15:32
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0397 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.