Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.06.2018, 14:19
Konstantin-78 Konstantin-78 вне форума
Новичок
 
Регистрация: 27.04.2015
Сообщения: 76
Версия Delphi: Delphi7
Репутация: 10
По умолчанию После горизонталного объединения ячеек в таблице Word, перестают вставлятся данные в

Доброе время суток форумчане
У меня есть шаблон «*.rtf», в который вместо некоторых слов в шаблоне (после их предварительного поиска «FindAndPasteTextDoc('&&example_table$$', ' ', 1, 2, 0, 1, clBlack);»),
подставляется пустая таблица (CreateTable(5, 7, LTableID);), затем я в этой таблице объединяю строки (Merge_Cells_Table(LT, 1, 1, 2, 1);).
Это все работает, если я не объединяю ячейки по горизонтали.
Если я объединю ячейки по горизонтали, то перестанут выводится все значения (которые выводились). Если этого объединения нет, то все прекрастно выводится.

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  LTableID, LT: integer;
begin
  CoInitialize(Nil);
  Open_Doc_Template(ExtractFileDir(application.ExeName)+'\Template_example.rtf');

  FindAndPasteTextDoc('&&example_table$$', ' ', 1, 2, 0, 1, clBlack);
    LTableID := 1; //number table in doc
    CreateTable(5, 7, LTableID);

  LT := 1;
  Merge_Cells_Table(LT, 1, 1, 2, 1);//объединяются 2 ячейки первого столбца по вертикали
//  Merge_Cells_Table(LT, 1, 2, 1, 3); //объединяются 2 ячейки первой строки по горизонтале //<- если раскоментировать, то значения перестают вставляться во всю табл.
  SetTextToTable(LT, 1, 1, 0, 'Значение1');
  SetTextToTable(LT, 1, 2, 0, 'Значение2');

  SaveDocAs(ExtractFileDir(application.ExeName)+'\output\', 'result_doc.rtf', 1);
end;


Дополнительные функции и процедуры:
Код:
function TForm1.CreateTable(ANumRows, ANumColumns: integer;
                     var ATableID: integer): boolean;
var
  LSel: variant;
begin
  CreateTable := true;
  try
    LSel := Words_Templs.Selection;
    Words_Templs.ActiveDocument.Tables.Add(Range := LSel.Range, NumRows := ANumRows, NumColumns := ANumColumns);

    begin 
      LSel.Tables.Item(1).Borders.item(-1).LineStyle := 1;
      LSel.Tables.Item(1).Borders.item(-2).LineStyle := 1;
      LSel.Tables.Item(1).Borders.item(-3).LineStyle := 1;
      LSel.Tables.Item(1).Borders.item(-4).LineStyle := 1;
      LSel.Tables.Item(1).Borders.item(-5).LineStyle := 1;
      LSel.Tables.Item(1).Borders.item(-6).LineStyle := 1;
    end;
    ATableID := Words_Templs.ActiveDocument.Tables.Count;
 except
    CreateTable := false;
  end;
end;

procedure TForm1.Merge_Cells_Table(AIDTable, ARowFrom, AColFrom, ARowTo, AColTo: integer);
begin
  Words_Templs.ActiveDocument.Tables.Item(AIDTable).Cell(ARowFrom, AColFrom).
    Merge(Words_Templs.ActiveDocument.Tables.Item(AIDTable).Cell(ARowTo, AColTo));
end;

function TForm1.SetTextToTable(AIDTable, ARow, AColumn, TypeInput: integer;
                                                           AText: string): boolean;
begin
  SetTextToTable := true;
  try
    case TypeInput of
      0: Words_Templs.ActiveDocument.Tables.Item(AIDTable).Columns.Item(AColumn).Cells.Item(ARow).Range.Text := AText; 
      1: Words_Templs.ActiveDocument.Tables.Item(AIDTable).Rows.Item(ARow).Cells.Item(AColumn).Range.Text := AText; 
    end;
  except
    SetTextToTable := false;
  end;
end;

Где может быть ошибка?
Заранее спасибо за ответ.
Изображения
Тип файла: png Untitled.png (1.7 Кбайт, 1 просмотров)
Ответить с цитированием
  #2  
Старый 05.06.2018, 16:03
Konstantin-78 Konstantin-78 вне форума
Новичок
 
Регистрация: 27.04.2015
Сообщения: 76
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Хотя, если поменять местами вставку текста и объединение ячеек - то все РАБОТАЕТ.

ПРИЧЕМ, объединять сначало нужно ячейки по столбцам, а потом по строкам.

Код:
SetTextToTable(1, 1, 1, 0, 'Колонка №1');
  SetTextToTable(1, 2, 2, 0, 'Колонка №2');
  SetTextToTable(1, 2, 3, 0, 'Колонка №3');
  SetTextToTable(1, 1, 4, 0, 'Колонка №4');
  SetTextToTable(1, 1, 2, 0, 'Объединяющая колонка');
  Merge_Cells_Table(1, 1, 1, 2, 1);
  Merge_Cells_Table(1, 1, 4, 2, 4);
  Merge_Cells_Table(1, 1, 2, 1, 3);
Изображения
Тип файла: png Untitled2.png (3.4 Кбайт, 1 просмотров)

Последний раз редактировалось Konstantin-78, 05.06.2018 в 16:12.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:32.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter