Указание диапазона в конце ячейки таблицы - PullRequest
0 голосов
/ 06 декабря 2018

В Perl CGI, используя Win32 :: OLE, мне нужно вставить несколько текстовых строк в ячейку таблицы, но одну за другой.

Я использую следующие объекты:

  • $ go_document , документ Word
  • $ lo_table , таблица Word
  • $ li_row и $ li_col , координаты ячейки в таблице
  • @ ly_lines , текстовый массив

Вот мой код, который работает правильно:

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

Моя проблема возникает, когда я пытаюсь применить стиль к каждой из текстовых строк.

Поскольку я не хочу устанавливать стиль для всей ячейки, но для строки Iсобираюсь вставить, я попробовал это (стили хранятся в массиве @ 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) не устанавливает диапазон до конца целевой ячейки,но тo начало следующего.

Кто-нибудь знает, как это исправить?Заранее спасибо.

1 Ответ

0 голосов
/ 07 декабря 2018

Вы на правильном пути.

Сразу после wdCollapseEnd попробуйте переместить диапазон назад на символ:

$lo_range->MoveEnd(wdCharacter, -1)

«Почему» немного загадочно, и я не уверен, является ли причиной то, что я представляюЭто правильно ... Я считаю, что причина в том, что сворачивание Диапазона фокусирует внимание на начале следующей ячейки.Думайте об этом, как будто вся ячейка была выбрана, и нажатие стрелки вправо перемещается к следующей ячейке, а не в конце текста в выбранной ячейке.Поэтому необходимо переместиться назад на один символ (например, нажав стрелку влево), чтобы добраться до конца исходной ячейки.

Range имеет MoveEnd и MoveStart.Использование положительного числа с MoveStart или отрицательного числа с MoveEnd будет эффективно перемещать весь Range без включения дополнительного содержимого.Отрицательное значение с MoveStart или положительное значение с MoveEnd будет расширять Range для включения нового содержимого.Опять же, подумайте об этом, как об использовании клавиш со стрелками, но на этот раз удерживая нажатой клавишу Shift, чтобы расширить выбор.Существуют различные параметры (WdUnits Enumeration), которые можно использовать с этими методами, которые работают с такими объектами, как ячейки, абзацы и т. Д. Список можно найти в справочнике по языку Word.

...