2009-07-17 3 views
2

Я пытаюсь сделать таблицы внутри таблиц в WORD. конечно, в финальной программе это будет динамическое, чего нет в этом примере.OLE automation - WORD tabels (Delphi)

Вот мой пример кода.

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

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

спасибо, Rok

+0

Может быть, вы можете редактировать свой пост, чтобы сделать его более удобочитаемый. (Больше всего: правильное написание) –

+2

Также я настоятельно рекомендую использовать раннее связывание (= использовать интерфейсы из импортированного Word_TLB), который имеет ряд преимуществ перед поздним связыванием (= using OleVariants) –

ответ

3

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

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

Вы должны сделать то же самое для bTable & CTABLE.

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

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

Смежные вопросы