automação OLE - tabels Word (Delphi)
-
16-09-2019 - |
Pergunta
Eu estou tentando fazer tabelas dentro de tabelas no Word. é claro no programa finall será dinamical, que não é nesta amostra.
Aqui está o meu código de exemplo.
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);
em primeiro lugar, colocar nova tabela (2 filas, uma coluna) sobre a posição do cursor, e, em seguida, i tentar colocar segunda tabela na célula (1,1) e o terceiro na célula (2,1) da primeira mesa. segunda tabela tem também 2 linhas e uma coluna, mas terceira tabela tem 3 linhas e uma coluna. mas em vez do que eu quero eu recebo segunda e terceira tabela Whit apenas uma linha, independentemente se eu putt algo no celular ou not.i sempre ver apenas a última seqüência de eu colocar na tabela.
ainda mais, se eu colocar 1 linha e 2 mesa de coluna dentro primeira tabela, do que tudo é normal.
você pode me ajudar.
graças, Rok
Solução
Quando você tem problemas para criar essas tabelas em código, faça o seguinte:
- Abra o Word
- gravar uma nova macro
- Durante a gravação, construir a tabela que você deseja, em seguida, parar a gravação.
- Ver o código de macro no Editor do Visual Basic e tentar traduzir isso para código de OLE-automação (que não é tão difícil, é quase o mesmo)
Outras dicas
aTable.Borders.Item(wdBorderVertical).LineStyle:=wdLineStyleSingle;
aTable.Borders.Item(wdBorderHorizontal).LineStyle:=wdLineStyleSingle;
Você vai ter que fazer o mesmo para bTable & CTable.
Quando você adiciona mais de 1 linha / coluna, ele vai precisar de fronteira para separá-lo (isto é, para separar uma linha a partir de outro OU separar uma coluna de outro).
Espero que isso ajude.