我正在开发一种在Perl CGI中使用Win32 :: OLE生成Word文档的工具,但遇到的是我无法解决的问题:插入图片时,它显示在生成的文档,无论我要求在何处插入。
下面是一个示例代码,解释了我的担心,其中 $ go_document 是我的Word文档以及 $ 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" );
结果包括预期的文本行,但图像显示在第二行之后。而且,如果我包括两张图片,则第二张图片显示在文档末尾,但在第一张图片之前!
我应该做些什么而忘记了吗? 预先感谢您的帮助。
答案 0 :(得分:0)
我从没使用过perl,所以只能根据我对Word对象模型的了解以及在问题代码中看到的内容为您提供伪代码。连同下面的解释,希望它足以使您前进...
Range
是Word对象模型中最有用的对象之一。可以将Range视为一个不可见的选择来使用它。自动化代码可以使用多个范围,但是只能有一个选择,这是范围有用的原因之一。另一个是通常执行速度更快,并且屏幕闪烁更少。
如果目标是在文档末尾插入图片,则需要一个Range来代表文档的终点。例如(伪代码!我不知道如何在perl中指定单词枚举的成员):
my $endDocRange = $go_document->Content;
$endDocRange->Collapse(Word.WdCollapseDirection.wdCollapseEnd);
像这样,首先选择整个文档,然后按向右箭头以在文档末尾出现闪烁的光标。
然后将对象$endDocRange
用作图片的目标范围:
$go_document->InlineShapes->AddPicture( WorkDir() . $as_file, 0, 1, $endDocRange );
如果再次运行上述代码,则在第一张图片之后,文档的末尾应出现另一张图片。 (但不能保证第一行中的文本会以Selection
结尾,因此仅根据问题中的代码可能不会更改。)