【问题标题】:How to select text in a cell of a table in MSWOrd using delphi automation?如何使用delphi自动化在MSWOrd中的表格单元格中选择文本?
【发布时间】:2014-07-16 07:51:29
【问题描述】:

我很难理解 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

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

请帮忙。

谢谢

【问题讨论】:

  • 您可以录制一个宏并为delphi获取适应的代码。
  • 好吧,我试过了,但仍然无法知道我的单元格中有多少行才能全部选中。另外,我需要确切知道自从进入表格后我需要传递多少个字符,直到我到达我想要的 CELL。那不适用
  • 另外,如果我在开始录制时位于单元格内,我可以选择选择单元格,然后对单元格进行格式化。然后宏将如下所示:Selection.SelectCell Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter Selection.Cells.VerticalAlignment = wdCellAlignVerticalCenter 现在我如何将它应用到我的表格单元格?如何指定要选择的单元格?

标签: delphi ms-word text-alignment


【解决方案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”。如果你把它们注释掉,你会发现所有的文本都在 1,1 单元格中。

【讨论】:

  • @user1137313:这不是你要找的答案吗?
  • 太棒了。现在可以了。现在我可以像在网格中一样访问单元格并为它们设置属性,速度超快。谢谢
【解决方案2】:

我假设您已经编写了一些复杂的代码,并且不想重写您的代码。但是,我确实想建议您在enter link description here 上查看 TMS 软件。它们有非常丰富的表格组件。

【讨论】:

  • 我实际上需要生成一个包含文本、表格和图表的Word文档。这不是因为我不知道 delphi 中的网格。
  • -1。该问题专门询问有关 Word 自动化的问题。如果它要求对组件集进行推荐,则您的答案将适用(尽管该问题将偏离主题)。
  • 我说的是在Delphi中使用表格组件,然后将您的表格导出为word。优点之一是“保存到 Word DOC 文件”。这意味着您可以在 Delphi 中设置整个表并将其导出到 World。我一直都这样做。但是,嘿,我是不会编程的失败者。下次重视我的答案
  • 说第三方组件不是你的错。这是我的问题是关于在表格单元格内使用对齐方式。我非常怀疑从任何 Grid 组件保存到 Word 中是否会影响每个单元格的对齐方式。所以这就是为什么这些人不赞成你的答案。所以我可以将数据集导出到单词表是很好的,但我已经过去了,我的问题是处理目标文档的格式。我需要合并单元格,将它们水平、垂直对齐,更改文本颜色等等。我很确定我不能通过 TMS 做到这一点
  • 最好的解决方案永远是免费的解决方案,尤其是在大部分自动化完成之后。当第一次尝试是免费的并且快要完成时,我停止工作并从头开始(并在新事物上也花一些钱)是不明智的。
猜你喜欢
  • 1970-01-01
  • 2010-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 2010-12-07
  • 1970-01-01
相关资源
最近更新 更多