Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2015, 20:20   #1
Nasle73
Пользователь
 
Регистрация: 09.05.2015
Сообщений: 11
Вопрос Delphi БД - Экспорт DBGrid в Word

Здравствуйте. Проблема заключается в следующем. Программа при нажатии на кнопку должна формировать отчет в вордовский документ из полей edit в определенные места в документе и так же должна формировать таблицу, так же в определенном месте документа. Формирование из полей edit реализовано. Но не как не могу сделать там же формирование таблицы. Причем при формировании должен открываться не новый документент, а имеющийся шаблон.

Код формирование отчета с записями из полей edit.

Код:
procedure TForm6.Button2Click(Sender: TObject);
var
word : variant;
procedure FindAndReplace (SearchStr, ReplaceStr : string);
begin
word.Selection.Find.Text := SearchStr;
word.Selection.Find.Replacement.Text := ReplaceStr;
word.Selection.Find.Execute (Replace := 2);
end;
begin
try
 Word:=CreateOleObject('Word.Application');
except
MessageBox (Handle, 'Не установлен Microsoft Office Word. Формирование ' +
'диакарты невозможно.', 'Ошибка',
MB_OK or MB_ICONERROR);
exit;
end;
word.documents.open ('C:\program\doc\prikaz.doc');      //путь к файлу
FindAndReplace ('%DATA%', Edit1.Text);      //Дата
FindAndReplace ('%NOMER%', Edit2.Text);     //номер
FindAndReplace ('%YSHGOD%', Edit3.Text);    //Учебный год
FindAndReplace ('%ZAV%', Edit4.Text);    //Заведующий отделением информационных техналогий
FindAndReplace ('%KURS%', Edit5.Text);  //курс
FindAndReplace ('%SPECIALNOST%', Edit6.Text);    //Специальности
FindAndReplace ('%PRACTS%', Edit7.Text);      //На практику с
FindAndReplace ('%PRACTPO%', Edit8.Text);   //по
word.Visible := true;
word := Unassigned;
end;
Из кода можно заметить, что у нас имеется документ prikaz.doc. Который открывается в ворде и в который добавляются записи из полей edit. Нужно ещё каким-то образом сформировать туда же таблицу из DBGrd.

Скрин формы http://itmages.ru/image/view/2534810/b1728fe1
Ссылка на программу из которой пытался достать экспорт таблицы https://yadi.sk/d/T5J2BuhAgWGK2

Последний раз редактировалось Nasle73; 09.05.2015 в 20:23.
Nasle73 вне форума Ответить с цитированием
Старый 09.05.2015, 20:59   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я уже предлагал на форуме решения:
http://www.programmersforum.ru/showthread.php?t=198926
http://www.programmersforum.ru/showthread.php?t=203376
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.05.2015, 11:08   #3
SQLPowerUser
Форумчанин
 
Аватар для SQLPowerUser
 
Регистрация: 19.01.2015
Сообщений: 158
Стрелка Альтернативный вариант. Очень высокая скорость, но ограничение на размер строки 32 Кб

Код:
procedure TForm1.BitBtn2Click(Sender: TObject);
var
  WordApp, NewDoc: Variant;
  j, f: integer;
  s: string;
begin
  // Работает очень быстро, тут даже буфер обмена НЕ требуется, но таблица будет из строки длиной максимум 32 Кб
  BitBtn2.Enabled := false;
  try
    f := ADODataSet1.FieldCount - 1;
    s := '';

    ADODataSet1.Recordset.MoveFirst; // Формируем длинную строку по принципу: разделитель между ячейками в одной строке - это табуляция (символ #9),
    while not ADODataSet1.Recordset.Eof do // а будущие строки разделяются символом #13
    begin
      for j := 0 to f do s := s + VarToStr(ADODataSet1.Recordset.Fields[j]) +#9;

      SetLength(s,length(s)-1); // убираем последний символ табуляции
      s := s + #13;
      ADODataSet1.Recordset.MoveNext;
    end;

    WordApp := CreateOleObject('Word.Application');
    NewDoc := WordApp.Documents.Add;
    WordApp.DisplayAlerts := 0;
    WordApp.Visible := False;

    WordApp.Selection.Font.Name := 'Arial';
    WordApp.Selection.Font.Size := 11;
    WordApp.Selection.ParagraphFormat.Alignment := 1; // Выравнивание по центру
    WordApp.Selection.TypeText('Результат выполнения SQL-запроса' + #10#10);

    WordApp.Selection.ParagraphFormat.Alignment := 0; // Выравнивание слева, если не сделать, то слова в таблице будут по центру, т.к. выше сделано WordApp.Selection.ParagraphFormat.Alignment := 1;

    WordApp.Selection.TypeText(s); // Вставим нашу строку. БЕЗ буфера обмена :)

    WordApp.Selection.GoTo(wdGoToLine, wdGoToFirst, 3, ''); // Перемещаемся на начало 3-й строки. Именно в 3-й строке вставился текст выше.
    WordApp.Selection.EndKey(6,1); // Выделяем текст от курсора до конца документа

    WordApp.Selection.ConvertToTable(EmptyParam); // Преобразуем выделенный текст в таблицу

    WordApp.Selection.Tables.Item(1).AutoFitBehavior(1); // Автоматическая ширина колонок по содержимому текста
    WordApp.Selection.Tables.Item(1).Borders.InsideLineStyle := 1; // Линии между ячейками.
    WordApp.Selection.Tables.Item(1).Borders.OutsideLineStyle := 1; // Линии между ячейками.

    WordApp.Selection.HomeKey(6); // Перемещаемся в начало документа для удобства пользователя
  finally
    BitBtn2.Enabled := true;
    WordApp.Visible := true;
    WordApp := Unassigned;
    NewDoc := Unassigned;
  end;
end; // BitBtn2Click

Последний раз редактировалось SQLPowerUser; 12.05.2015 в 11:19.
SQLPowerUser вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экспорт из DBGrid в Excel Oleg Romanchuk БД в Delphi 2 23.07.2011 09:46
Экспорт DBGrid в Excel SevenXP C/C++ Базы данных 2 08.07.2011 15:36
Экспорт данных из DBgrid pusik БД в Delphi 0 24.05.2011 09:14
Экспорт DBGrid в Excel SpyCrypt БД в Delphi 5 28.04.2011 15:54
Экспорт из БД в Word в Delphi sting1920 Помощь студентам 3 03.03.2010 13:36