用perl在word文档中插入图片Win32::OLE

Inserting a picture in a word document with perl Win32::OLE

我正在开发一个在 Perl CGI 中使用 Win32::OLE 生成 Word 文档的工具,但我遇到了一个我无法解决的问题:当我插入图片时,它显示在生成文档的末尾,无论我要求将其插入何处。

这是解释我的担忧的示例代码,其中 $go_document 是我的 Word 文档 ans $as_file 我的图片文件路径:

$go_document->ActiveWindow->Selection->TypeText( "before the picture\n" );

my $last = $go_document->Paragraphs->Count;
my $para = $go_document->Paragraphs( $last );
$go_document->InlineShapes->AddPicture( WorkDir() . $as_file, 0, 1, $para->Range );

$go_document->ActiveWindow->Selection->TypeText( "after the picture\n" );

结果包含预期的文本行,但图像显示在第二行之后。此外,如果我包含 2 张图片,则第二张显示在文档末尾,但在第一张之前!

有什么事情我应该做但我忘了吗? 在此先感谢您的帮助。

我从来没有用过perl,所以我只能根据我对Word对象模型的了解以及我在问题代码中看到的内容,给你伪代码。连同下面的解释,希望这足以让你继续......

Word 对象模型中最有用的对象之一是 Range。将 Range 想象成一个不可见的选择,以便使用它。自动化代码可以使用多个范围,但只能有一个选择,这是范围有用的原因之一。另一个是执行速度通常更快,屏幕闪烁更少。

如果目标是在文档末尾插入图片,则需要一个代表文档终点的范围。例如(伪代码!我不知道如何在perl中指定一个Word Enumeration的成员):

my $endDocRange = $go_document->Content;
$endDocRange->Collapse(Word.WdCollapseDirection.wdCollapseEnd);

把这想象成首先选择整个文档,然后按向右箭头以在文档的最后出现一个闪烁的光标。

对象$endDocRange然后作为图片的目标范围:

$go_document->InlineShapes->AddPicture( WorkDir() . $as_file, 0, 1, $endDocRange );

如果上面的代码又是 运行,那么在文档末尾第一张图片之后应该会出现一张附加图片。 (但不能保证第一行中的文本最终会在哪里结束,因为 Selection 可能不会改变,仅基于问题中的代码。)