Perl 将范围指向表格单元格的末尾

Perl 将范围指向表格单元格的末尾,perl,ms-word,win32ole,word-table,Perl,Ms Word,Win32ole,Word Table,在Perl CGI中,使用Win32::OLE,我需要在一个表单元格中插入几行文本,但要逐个插入 我使用的不同对象是: $go_文档,Word文档 $lou表,单词表 $li_行和$li_列,表中的单元格坐标 @ly_行,文本数组 这是我的代码,可以正常工作: for (my $ii = 0; $ii <= $#ly_lines; $i++) { my $lo_range = $lo_table->Cell($li_row, $li_col)->Range;

在Perl CGI中,使用Win32::OLE,我需要在一个表单元格中插入几行文本,但要逐个插入

我使用的不同对象是:

  • $go_文档,Word文档
  • $lou表,单词表
  • $li_行和$li_列,表中的单元格坐标
  • @ly_行,文本数组
这是我的代码,可以正常工作:

for (my $ii = 0; $ii <= $#ly_lines; $i++)
{
    my $lo_range = $lo_table->Cell($li_row, $li_col)->Range;
    $lo_range->InsertAfter($ly_lines[$ii]);

    $lo_range = $lo_table->Cell($li_row, $li_col)->Range;
    $lo_range->InsertParagraphAfter();
}
用于(my$ii=0;$ii单元格($li_行,$li_列)->范围;
$lo_范围->插入后面($ly_行[$ii]);
$lo_范围=$lo_表格->单元格($li_行,$li_列)->范围;
$lo_range->InsertParagraphAfter();
}
我的问题发生在我尝试将样式应用于每一个文本行时

因为我不想设置整个单元格的样式,而是要插入的行的样式,所以我尝试了以下方法(样式存储在@ly_样式数组中):

用于(my$ii=0;$ii单元格($li_行,$li_列)->范围;
$lo_范围->折叠(WDCOLLAPSEND);
$go_文档->样式->添加($ly_样式[$ii]);
$lo_范围->{'Style'}=$ly_样式;
$lo_范围->插入后面($ly_行[$ii]);
$lo_范围=$lo_表格->单元格($li_行,$li_列)->范围;
$lo_范围->折叠(WDCOLLAPSEND);
$lo_range->InsertParagraphAfter();
}
在这个循环中,文本行以相反的顺序读取,并在我想要的单元格旁边读取

似乎collapseend(wdCollapseEnd)命令并没有将范围设置为目标单元格的末尾,而是设置为下一个单元格的开头

有人知道如何解决这个问题吗?
提前谢谢。

你走对了方向

wdCollapseEnd
之后立即尝试将范围向后移动一个字符:

$lo_range->MoveEnd(wdCharacter, -1)
“为什么”有点神秘,我不确定我想象的原因是否正确…我认为原因是缩小范围会将焦点放在下一个单元格的开头。想象一下,就好像整个单元格都被选中了一样,按向右箭头移动到下一个单元格,而不是所选单元格中文本的末尾。因此,它是正确的必须向后移动一个字符(如按左箭头)才能到达原始单元格的末尾

Range
具有
MoveEnd
MoveStart
。使用带
MoveStart
的正数或带
MoveEnd
的负数将有效地移动整个
范围
,而不包括其他内容。带
MoveStart
的负值或带
MoveEnd>的正值
将扩展
范围
以包含新内容。同样,可以像使用箭头键一样考虑,但这次按住
Shift
以扩展选择。有各种参数(
WdUnits
枚举)可与这些处理对象(如单元格、段落等)的方法一起使用。该列表可在Word语言参考中找到

$lo_range->MoveEnd(wdCharacter, -1)