Автоматизация OLE — таблицы WORD (Delphi)
-
16-09-2019 - |
Вопрос
Я пытаюсь создавать таблицы внутри таблиц в 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 столбцов в первую таблицу, все будет нормально.
Вы можете помочь мне.
спасибо, Рок
Решение
Если у вас возникли проблемы с созданием этих таблиц в коде, сделайте следующее:
- Открытое слово
- записать новый макрос
- Во время записи постройте нужную таблицу, затем остановите запись.
- Просмотрите код макроса в редакторе Visual Basic и попытайтесь перевести его в код OLE-автоматизации (что не так уж и сложно, это почти то же самое).
Другие советы
aTable.Borders.Item(wdBorderVertical).LineStyle:=wdLineStyleSingle;
aTable.Borders.Item(wdBorderHorizontal).LineStyle:=wdLineStyleSingle;
Вам придется сделать то же самое для bTable и cTable.
Когда вы добавляете более 1 строки/столбца, для их разделения потребуется граница (т. е. чтобы отделить 1 строку от другой ИЛИ отделить 1 столбец от другого).
Надеюсь это поможет.