Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OLE, Word Проблема с SaveAs 
:(
    Опции темы
Енот47
Дата 29.3.2009, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть CGI скрипт, который открывает Word файл, а затем сохраняет его где-нибудь.
Код выглядит так:

Код

use Win32::OLE;
use Win32::OLE qw(in with);
use Win32::OLE::Variant;
use Win32::OLE::Const 'Microsoft Word';

#Word
$Word = Win32::OLE->GetActiveObject('Word.Application') ||
       Win32::OLE->new('Word.Application');
$Word->{'Visible'}     = 1;
$Word->{DisplayAlerts} = 1;

# Open File
my $File = $Word->Documents->Open("C:\\templ.dot");

$Word->ActiveDocument->SaveAs('C:\\doc.doc');

sleep 5;
# Quit/Close
$File->Close(); 
$Word->Quit(); 


При выполнении, возникает ошибка:
Can't call method "SaveAs" on an undefined value at C:\shttps\www\cgi-bin\ddt.pl line 15.
Я в перле гость, и сломал голову, не знаю в чем причинаsmile
Тот же скрипт из командной строки работает на ура.
Помогите, кто чем может: ссылкой, словом добрым))
З.Ы. HTTP сервер Small HTTP.
PM MAIL   Вверх
klem4
Дата 29.3.2009, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



какие права стоят на  C:\\templ.dot ? поставьте or die $!  для конструктора и метода open видимо кто-то из них не отрабатывает.

PM MAIL   Вверх
Енот47
Дата 29.3.2009, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да, действительно, не работает Open. Прав должно хватать.
Причем такие проблемы только с Word-ом.
Аналогичный пример для Excel работает прекрасно, и сохраняет как надо.

Пробовал просто создавать новый файл:
  my $File = $Word->Documents->Add || die $!;
- тот же эффект.
PM MAIL   Вверх
klem4
Дата 29.3.2009, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А что говорит die ? Да и есть наверняка специальная переменная для этого объекта, содержащая текст последней ошибки.
PM MAIL   Вверх
Енот47
Дата 30.3.2009, 02:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ага, есть такое.
Вообщем код стал таким:
Код

use Win32::OLE;
use Win32::OLE qw(in with);
use Win32::OLE::Variant;
use Win32::OLE::Const 'Microsoft Word';

#Word
$Word = Win32::OLE->GetActiveObject('Word.Application') ||
       Win32::OLE->new('Word.Application') || die $!;
$Word->{'Visible'}     = 1;
$Word->{DisplayAlerts} = 1;

# Open File
my $File = $Word->Documents->Add || OLEError("Ошибка");
$Word->ActiveDocument->SaveAs('C:\\doc.docx');

sleep 5;
# Quit/Close
$File->Close(); 
$Word->Quit(); 

  sub OLEError {
  my $msg  = shift;
  my $oleerror;

  $oleerror = "" . Win32::OLE->LastError();
  $msg = "$msg: $oleerror";
  print "$msg\n";
  }


На выходе читаем такую строчку:
Can't call method "SaveAs" on an undefined value at C:\shttps\www\cgi-bin\ddt.pl line 14. Ошибка: OLE exception from "Microsoft Word": Ошибка в Word. Win32::OLE(0.1709) error 0x800a13e9 in METHOD/PROPERTYGET "Add"

Это сообщение отредактировал(а) Енот47 - 30.3.2009, 02:40
PM MAIL   Вверх
shamber
Дата 30.3.2009, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

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



У меня Ваш код отработал отлично. WinXP
PM MAIL Jabber   Вверх
Енот47
Дата 30.3.2009, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сегодня в институте попробовал запускать код.  Все нормально.
Похоже проблемы с Вордом, а раз так, то к программированию это отношения не имеет.
Тема закрыта, спасибо всем за участие smile
PM MAIL   Вверх
Mr.Floppy
Дата 8.12.2011, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Та же проблема была, только с Питоном. Самое интересное, давно написанный код на Delphi прекрасно работал.
Решение (Word 2010): Параметры - Центр управления безопасностью - Параметры макросов - Доверять доступ к объектной модели VBA
Только хотелось бы узнать, как программно менять эту политику, например при установке приложения?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

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


 




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


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

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