Следующий код иллюстрирует способ создания нового документа 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;