Использование Perl с модулем Win32 :: OLE Я пытаюсь вставить таблицу в документ Microsoft Word, а затем изменить ширину столбцов. Я могу вставить таблицу без каких-либо проблем, но изменение ширины столбцов оказалось более сложным. После создания макроса и пытается перевести VBA в Perl, вот что у меня есть:Как изменить ширину столбцов таблицы Word с помощью Perl?
my $word = Win32::OLE->new('Word.Application', sub {$_[0]->Quit;});
my $doc = $word->Documents->Open('myfile.doc');
### Code to find and select a tag to replace with a table goes here ###
my $table = $doc->Tables->Add($word->Selection->Range, 4, 4);
$table->Columns(1)->{PreferredWidthType} = wdPreferredWidthPoints;
$table->Columns(1)->{PreferredWidth} = 200;
К сожалению, это дает «Невозможно использовать неопределенное значение в качестве эталона HASH» ошибка на последних двух строках. Я пробовал несколько других вариантов, но ни один из них не работал, и Google тоже не помог. Я бы очень признателен за ответ, как это сделать.
Спасибо.
Я бы предложил использовать 'Data :: Dumper' для печати' $ table -> Columns (1) ', потому что эта ошибка означает, что' Columns (1) 'undefined. – Sobrique
@Sobrique, Caveat: Если вы используете Data :: Dumper для OLE-объектов * убедитесь, что * вы установили '$ Data :: Dumper :: MaxDepth' - особенно при работе с объектами Microsoft Application, которые обычно имеют каждый отдельный объект, указывающий назад к объекту Application, который содержит все. Win32 :: OLE по умолчанию не генерирует уникальные объекты и просто использует вашу память для повторного создания одного и того же объекта приложения снова и снова. – Axeman
Вы также можете указать '_Unique' при загрузке модуля: http://search.cpan.org/~jdb/Win32-OLE-0.1712/lib/Win32/OLE.pm#_Unique – Axeman