如何使用delphi自动化在MSWOrd中的表格的单元格中选择文本?

时间:2014-05-27 11:54:07

标签: delphi ms-word text-alignment

我很难理解Word Automation中的选择。 为了简短起见,我希望在生成的Word文档中有一个表格,我需要对特定单元格内的文本进行对齐。我如何实现这一目标?

我使用ComObj方法:

  var
   MsWord: Variant;
  ...
  try
    MsWord := GetActiveOleObject('Word.Application');
  except
    try
      MsWord := CreateOleObject('Word.Application');
      MsWord.Visible := True;
    except
      Exception.Create('Error');
    end;
  end;

如何告诉Word以后哪个文本(单元格)可以对齐? 我使用此代码将文本添加到单元格中:

Function AddTextToTableCell(Table:integer;Row, Column:integer;text:string):boolean;
begin
  AddTextToTableCell:=true;
  try
    MsWord.ActiveDocument.Tables.Item(Table).Columns.Item(Column).Cells.Item(Row).Range.Text:=text;
  except
    AddTextToTableCell:=false;
  end;
End;

我可以以某种方式修改它来设置单元格内文本的对齐方式吗?让我们说我想对位于以下位置的单元格进行居中对齐:行:1和列:3。我的单元格有多行(可变)文本。我想水平和垂直居中。

我搜索了Google上的其他自动化代码,这行应该可以解决问题,除非它在delphi中没有...(看起来VB等效于它):

MSWORD.ActiveDocument.Tables.Item(Table).Cell(Row,Column).Range.Paragraphs.Alignment := wdAlignParagraphCenter;

如果我使用

MSWORD.ActiveDocument.Tables.Item(Table).Range.ParagraphFormat.Alignment := wdAlignParagraphCenter

然后表格中的所有单元格都与水平中心对齐。我只想要一个特定的单元格,我希望它也能垂直居中

请帮忙。

谢谢

2 个答案:

答案 0 :(得分:1)

我不确定我是否误解了你的问题,但如果我不这样做,那就是由于一个简单的失步而造成的。下面的内容适用于我(D7),如果看起来有点啰嗦道歉,但我开始遇到与你相同的问题:

procedure TForm1.Button1Click(Sender: TObject);
var
  MSWord,
  Document,
  Table,
  Selection,
  Range,
  Cell : OleVariant;
  Rows,
  Columns,
  ARow,
  AColumn : Integer;
  RowIndex,
  ColIndex : Integer;
  S : String;
begin
  try
    MsWord := GetActiveOleObject('Word.Application');
  except
    try
      MsWord := CreateOleObject('Word.Application');
      MsWord.Visible := True;
    except
      Exception.Create('Error');
    end;
  end;
  Rows := 3;
  Columns := 4;
  Document := MSWord.Documents.Add;
  Table := MSWord.ActiveDocument.Tables.Add( Range:= MSWord.Selection.Range, NumRows:= Rows, NumColumns:= Columns, DefaultTableBehavior:= wdWord9TableBehavior, AutoFitBehavior:= wdAutoFitFixed);

  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;
      S := Format('Row: %d, col: %d', [RowIndex, ColIndex]);
      MSWord.Selection.Range := Range;
      MSWord.Selection.TypeText(Text := S);
    end;
  end;

  Cell := Table.Cell(2, 2);
  Range := Cell.Range;
  Range.Select;
  Range.ParagraphFormat.Alignment := wdAlignParagraphCenter;
end;

关键是" range.select" s。如果你对它们进行评论,你会发现所有文本都以1,1单元格结束。

答案 1 :(得分:-3)

我假设您已经编写了一些复杂的代码,并且不希望重写代码。不过,我建议您在enter link description here查看TMS Software。它们具有非常丰富的表组件。