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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top