Delphi xe10.2 открывает новый документ MS Word и вставляет таблицу - PullRequest
0 голосов
/ 10 июня 2018

в delphi xe 10.2. Какой правильный формат для следующего кода MSWord.Selection.ParagraphFormat.Alignment: = wdAlignParagraphJustify;

1 Ответ

0 голосов
/ 10 июня 2018

Следующий код иллюстрирует способ создания нового документа Word, вставки в него таблицы и последующего указания выравнивания ячеек.

Обратите внимание, что у него есть два вызова MSWord.Selection.ParagraphFormat.Alignment := wdAlignParagraphJustify, один сразупосле создания таблицы и еще один внутри цикла for, который устанавливает ячейки таблицы.Это иллюстрирует потенциальную проблему с использованием MSWord.Selection, а именно то, что Selection может не соответствовать вашим ожиданиям, и поэтому работа с ним может привести к неожиданным / нежелательным результатам.

Если вы закомментируете второепозвонив по номеру MSWord.Selection.ParagraphFormat.Alignment := wdAlignParagraphJustify, вы заметите, что только первая ячейка получает это выравнивание.и после этого выравнивание оставшихся ячеек возвращается к тому, что было до создания таблицы.Если вы закомментируете первый вызов вместо этого, вы обнаружите, что с точки зрения выравнивания ячеек это излишне.

procedure TForm1.CreateTable(Rows, Columns : Integer);
var
  MSWord,
  Document,
  Table,
  Range,
  Cell: OleVariant;
  ARow,
  AColumn: Integer;
  RowIndex,
  ColIndex : Integer;
  S : String;
begin
  MsWord := CreateOleObject('Word.Application');
  MsWord.Visible := True;

  Document := MSWord.Documents.Add;
  MSWord.Selection.Font.Size := 22;
  MSWord.Selection.Font.Bold := true;
  MSWord.Selection.TypeText(#13#10);
  MSWord.Selection.TypeText('This should be center-aligned');
  MSWord.Selection.ParagraphFormat.Alignment := wdAlignParagraphCenter;
  MSWord.Selection.TypeText(#13#10#13#10);
  MSWord.Selection.Font.Size := 12;
  MSWord.Selection.Font.Bold := False;

  Table := MSWord.ActiveDocument.Tables.Add( Range:= MSWord.Selection.Range, NumRows:= Rows, NumColumns:= Columns, DefaultTableBehavior:= wdWord9TableBehavior, AutoFitBehavior:= wdAutoFitFixed);

  MSWord.Selection.ParagraphFormat.Alignment := wdAlignParagraphJustify;
  for ARow := 1 to Rows do begin
    for AColumn := 1 to Columns do begin
      Cell := Table.Cell(ARow, AColumn);
      RowIndex := Cell.RowIndex;
      ColIndex := Cell.ColumnIndex;
      Caption := IntToStr(RowIndex) + '/' + IntToStr(ColIndex);
      Range := Cell.Range;
      Range.Select;
      MSWord.Selection.ParagraphFormat.Alignment := wdAlignParagraphJustify;
      if Odd(AColumn) then
        Range.Font.Bold := True
      else
        Range.Font.Bold := False;
      S := Format('Row: %d, col: %d', [RowIndex, ColIndex]);
      MSWord.Selection.Range := Range;
      MSWord.Selection.TypeText(Text := S);
    end;
  end;
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...