0
在Win32 :: OLE模塊中使用Perl我試圖將表插入到Microsoft Word文檔中,然後修改列寬。我可以毫無困難地插入表格,但修改列寬變得更加困難。創建宏,並試圖將VBA翻譯成Perl中後,這裏是我有:如何使用Perl修改Word表格的列寬?
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;
不幸的是這給在最後兩行「不能用一個未定義的值作爲散列引用」錯誤。我已經嘗試了其他幾種變體,但都沒有奏效,谷歌也沒有幫助。我真的很感謝有關如何做到這一點的答案。
謝謝。
我建議使用'Data :: Dumper'來打印'$ table - > Columns(1)',因爲這個錯誤意味着'Columns(1)'是未定義的。 – Sobrique
@Sobrique,注意:如果在OLE對象上使用Data :: Dumper *確保*設置了'$ Data :: Dumper :: MaxDepth' - 特別是在處理Microsoft應用程序對象時,通常每個對象都有指向到包含所有內容的Application對象。 Win32 :: OLE默認情況下不會生成唯一的對象,並且會簡單地使用內存重新創建同一個Application對象,並再次重新創建。 – Axeman
你也可以在加載模塊時指定'_Unique':http://search.cpan.org/~jdb/Win32-OLE-0.1712/lib/Win32/OLE.pm#_Unique – Axeman