将范围指向 table 单元格的末尾

Pointing a range at the end of a table cell

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

我使用的不同对象是:

这是我的代码,可以正常工作:

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();
}

当我尝试将样式应用于每一行文本时出现问题。

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

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

    $go_document->Styles->Add($ly_styles[$ii]);
    $lo_range->{'Style'} = $ly_styles;
    $lo_range->InsertAfter($ly_lines[$ii]);

    $lo_range = $lo_table->Cell($li_row, $li_col)->Range;
    $lo_range->Collapse(wdCollapseEnd);

    $lo_range->InsertParagraphAfter();
}

在这个循环中,文本行以相反的顺序读取 并且在我想要的 旁边的单元格中!

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

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

您走在正确的轨道上。

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

$lo_range->MoveEnd(wdCharacter, -1)

"why" 有点神秘,我不确定我想象的原因是否正确...我认为原因是折叠范围将焦点放在下一个单元格的开始。可以把它想象成整个单元格都被选中,然后按向右箭头移动到下一个单元格,而不是所选单元格中文本的末尾。所以有必要向后移动一个字符(如按向左箭头)以到达原始单元格的末尾。

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