OLE-автоматизация - WORD tabels (Delphi) - PullRequest
2 голосов
/ 17 июля 2009

Я пытаюсь сделать таблицы внутри таблиц в 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 столбцами в первую таблицу, чем все нормально.

Вы можете мне помочь.

спасибо, Рок

Ответы [ 2 ]

3 голосов
/ 17 июля 2009

Если у вас возникли проблемы с созданием этих таблиц в коде, выполните следующие действия:

  • Открытое слово
  • запись нового макроса
  • Во время записи создайте нужную таблицу, затем остановите запись.
  • Просмотр кода макроса в редакторе Visual Basic и попытка перевести его в код автоматизации OLE (что не так сложно, это почти то же самое)
0 голосов
/ 17 июля 2009
aTable.Borders.Item(wdBorderVertical).LineStyle:=wdLineStyleSingle;
aTable.Borders.Item(wdBorderHorizontal).LineStyle:=wdLineStyleSingle;

Вам придется сделать то же самое для bTable и cTable.

Когда вы добавляете более 1 строки / столбца, для его разделения потребуется рамка (то есть, чтобы отделить 1 строку от другого ИЛИ отделить 1 столбец от другого).

Надеюсь, это поможет.

...