2009-07-17 82 views
2

我想在WORD表格里面制作表格。当然在最后的节目中它将是dinamical,这不是在这个样本。OLE自动化 - WORD表格(德尔福)

这是我的示例代码。

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行和1列。但不是我想要什么我得到第二个和第三个桌子只有一行,不管我是否在他的单元格中输入了某些东西,我总是只看到放在该表格中的最后一个字符串。

甚至更​​多,如果我把1行和2列表放在第一个表内,那么一切都是正常的。

你能帮助我吗?

感谢,韩城

+0

也许你可以编辑您的文章,使之更可读。 (最重要的是:正确拼写) – 2009-07-17 06:10:09

+2

此外,我强烈建议(使用OleVariants =)使用早期绑定(=使用界面从导入Word_TLB),其中在这样的后期绑定具有许多优点 – 2009-07-17 06:26:06

回答

3

当你在代码中创建这些表的问题,请执行下列操作:

  • 打开Word
  • 记录新宏
  • 在录制,打造你想要的表,然后停止录制。
  • 查看宏代码的Visual Basic编辑器,并尝试把这种对OLE自动化代码(这并不难,这几乎是相同的)
0
aTable.Borders.Item(wdBorderVertical).LineStyle:=wdLineStyleSingle; 
aTable.Borders.Item(wdBorderHorizontal).LineStyle:=wdLineStyleSingle; 

你将不得不为BTABLE & cTable这样做。

当您添加超过100行/列,它需要边框分离它(即从另一个或分离1列从彼此分开1行)。

希望这会有所帮助。