OLE自动化 - WORD表格(Delphi)

时间:2009-07-17 06:00:40

标签: delphi office-automation ole-automation

我正在尝试在WORD中的表格中创建表格。当然在finall程序中它将是dinamical,这不在这个样本中。

这是我的示例代码。

 var
  aTable, bTable, cTable : OLEVariant;
begin
  m_WordApplication := CreateOleObject('Word.Application') ;
  m_WordDocument := m_WordApplication.Documents.Add;

  aTable := m_WordDocument.Tables.Add(m_WordApplication.Selection.Range, 2, 1);
  aTable.Borders.Item(wdBorderLeft).LineStyle:=wdLineStyleSingle;
  aTable.Borders.Item(wdBorderRight).LineStyle:=wdLineStyleSingle;
  aTable.Borders.Item(wdBorderTop).LineStyle:=wdLineStyleSingle;
  aTable.Borders.Item(wdBorderBottom).LineStyle:=wdLineStyleSingle;

  bTable := m_WordDocument.Tables.Add(aTable.Cell(1, 1).Range, 2, 1);
  bTable.Borders.Item(wdBorderLeft).LineStyle:=wdLineStyleSingle;
  bTable.Borders.Item(wdBorderRight).LineStyle:=wdLineStyleSingle;
  bTable.Borders.Item(wdBorderTop).LineStyle:=wdLineStyleSingle;
  bTable.Borders.Item(wdBorderBottom).LineStyle:=wdLineStyleSingle;

  cTable := m_WordDocument.Tables.Add(aTable.Cell(2, 1).Range, 3, 1);
  cTable.Borders.Item(wdBorderLeft).LineStyle:=wdLineStyleSingle;
  cTable.Borders.Item(wdBorderRight).LineStyle:=wdLineStyleSingle;
  cTable.Borders.Item(wdBorderTop).LineStyle:=wdLineStyleSingle;
  cTable.Borders.Item(wdBorderBottom).LineStyle:=wdLineStyleSingle;

  m_WordDocument.SaveAs('C:/test.doc', False) ;
  m_WordApplication.Quit(False);

首先,我将新表(2行,1列)放在光标的位置上,然后我尝试将第二个表放在第一个表的单元格(1,1)和第三个单元格(2,1)中。第二个表也有2行1列,但第3个表有3行1列。但不是我想要的,我得到第二和第三个表只有一行,无论我把东西放在他们的单元格或不。我总是看到我放在那个表中的最后一个字符串。

更重要的是,如果我在第一张表中放置1行和2列表,那么一切都正常。

你能帮助我吗?

谢谢,Rok

2 个答案:

答案 0 :(得分:3)

如果在代码中创建这些表时遇到问题,请执行以下操作:

  • 打开Word
  • 录制新的宏
  • 录制时,构建所需的表格,然后停止录制。
  • 在Visual Basic编辑器中查看您的宏代码并尝试将其转换为OLE自动化代码(这并不难,它几乎相同)

答案 1 :(得分:0)

aTable.Borders.Item(wdBorderVertical).LineStyle:=wdLineStyleSingle;
aTable.Borders.Item(wdBorderHorizontal).LineStyle:=wdLineStyleSingle;

你必须为bTable& cTable。

当你添加超过1行/列时,它需要边框来分隔它(即将1行与另一行分开或将1列与另一列分开)。

希望这有帮助。