2015-10-05 3 views
0

Использование 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 тоже не помог. Я бы очень признателен за ответ, как это сделать.

Спасибо.

+0

Я бы предложил использовать 'Data :: Dumper' для печати' $ table -> Columns (1) ', потому что эта ошибка означает, что' Columns (1) 'undefined. – Sobrique

+1

@Sobrique, Caveat: Если вы используете Data :: Dumper для OLE-объектов * убедитесь, что * вы установили '$ Data :: Dumper :: MaxDepth' - особенно при работе с объектами Microsoft Application, которые обычно имеют каждый отдельный объект, указывающий назад к объекту Application, который содержит все. Win32 :: OLE по умолчанию не генерирует уникальные объекты и просто использует вашу память для повторного создания одного и того же объекта приложения снова и снова. – Axeman

+0

Вы также можете указать '_Unique' при загрузке модуля: http://search.cpan.org/~jdb/Win32-OLE-0.1712/lib/Win32/OLE.pm#_Unique – Axeman

ответ

0

После нескольких проб и ошибок я обнаружил, что это сделало работу:

$table->Rows(1)->Select; 
$word->Selection->Columns(1)->{Width} = 200; 

Это было достаточно, чтобы изменить размер только столбцы на строке 1, и это повлияло на все остальные строки. Это легко, когда вы знаете, как это сделать!

Смежные вопросы