OLE 自动化 - WORD 表格 (Delphi)
Posted
技术标签:
【中文标题】OLE 自动化 - WORD 表格 (Delphi)【英文标题】:OLE automation - WORD tabels (Delphi) 【发布时间】:2009-07-17 06:00:39 【问题描述】:我正在尝试在 WORD 中的表格内制作表格。当然在 finall 程序中它会是动态的,这不在这个示例中。
这是我的示例代码。
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 列的表放在第一个表中,则一切正常。
你能帮帮我吗?
谢谢,罗克
【问题讨论】:
也许您可以编辑您的帖子以使其更具可读性。 (最重要的是:正确的拼写) 另外,我强烈建议使用早期绑定(= 使用导入的 Word_TLB 中的接口),与这样的后期绑定(= 使用 OleVariants)相比,它具有许多优势 【参考方案1】:当您在代码中创建这些表时遇到问题,请执行以下操作:
打开Word 录制新宏 录制时,构建您想要的表,然后停止录制。 在 Visual Basic 编辑器中查看您的宏代码并尝试将其转换为 OLE 自动化代码(这并不难,几乎相同)【讨论】:
【参考方案2】:aTable.Borders.Item(wdBorderVertical).LineStyle:=wdLineStyleSingle;
aTable.Borders.Item(wdBorderHorizontal).LineStyle:=wdLineStyleSingle;
您必须对 bTable 和 cTable 执行相同的操作。
当您添加超过 1 行/列时,它将需要边框来分隔它(即将 1 行与另一行分隔或将 1 列与另一列分隔)。
希望这会有所帮助。
【讨论】:
以上是关于OLE 自动化 - WORD 表格 (Delphi)的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用 OLE 的情况下在 delphi 中将 word 文档转换为 pdf?
如何使用C#将包含文字、图片和表格的二进制数据写入到word文件中