【发布时间】:2010-11-28 14:34:33
【问题描述】:
编辑:如果您有 VBA 中的示例,我会接受。我只是想了解如何将 Range 对象与 Tables 集合一起使用来复制和粘贴多个表而不循环。换句话说,如何使用 Tables 集合指定 1..lastTable 的范围?如果我能看到一个有效的 VBA 示例,我将处理 VBA --> Perl 转换。
我正在尝试使用 Perl 的 Win32::OLE 模块(通过 Dave Roth 的优秀书籍)来自动化我需要在一些 Word 文档上重复执行的几个任务。但是,本书(以及大多数 Web 示例)倾向于使用 Excel 作为示例,因此我不确定如何使用 Tables 集合对象有效地复制和粘贴。
这是我的代码的 sn-p:
my $originalDoc = $MSWord->Documents->Open('C:\Perl\testDocument.doc');
my $newDoc = $MSWord->Documents->Add;
my $selection = $MSWord->Selection(); # this may be spurious
my $Count = int( $originalDoc->Tables()->{Count} );
my $range = $originalDoc->Tables()->Range( { Start => $originalDoc->Tables(1)->{Range}->{Start},
End => $originalDoc->Tables($Count)->{Range}->{End}
} );
$range->Copy();
$newDoc->Range()->Paste();
原始代码使用的是段落,而不是表格,所以我假设一些错误是该代码的伪影(或者更可能是我不理解该代码)。
【问题讨论】:
-
我的建议是尝试在录制宏的同时手动执行任务,然后查看生成的 VBA 子程序。您应该能够轻松地将其概括并转换为 Perlish。
-
使用这个方法只是向我展示了如何使用 Selection 来获取一个表,而如果我尝试选择多个表,则编写宏来获取它们之间的文本,这不是我的追赶。
标签: perl ms-word range copy-paste win32ole