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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.10.2010, 18:42
Аватар для Первокурсница
Первокурсница Первокурсница вне форума
Прохожий
 
Регистрация: 27.02.2010
Сообщения: 46
Репутация: 10
Смущение Экспортировать отчёт из Delphi в MsWord, дублировать результат запроса в Label

Добрый день, уважаемые программисты!
У меня клиентское приложение "Телефонный справочник". С помощью запросов я должна выводить информацию об абонентах и их номера телефонов на экран с помощью DBGrid (с этим проблем не возникло) и записывать эту же информацию в отчёты (RvProject). На защиту преподаватель дал следующее задание:
1) результат запроса ADOQuery1 (а результатом является номер телефона абонента) должен дублироваться в Label.
2) все отчёты сделанные в среде Delphi нужно импортировать в MSWord, а ещё лучше сделать так чтобы они и открывались сразу же в MSWord.
Никаких указаний и подсказок он не дал!
Помогите пожалуйста!
Вот текст программы:
Код:
unit LAB5Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, RpCon, RpConDS, RpDefine, RpRave, StdCtrls, RpRender,
  RpRenderHTML, Grids, DBGrids, DB, ADODB;

type
  TForm1 = class(TForm)
    RvProject1: TRvProject;
    RvDataSetConnection1: TRvDataSetConnection;
    Button1: TButton;
    DBGrid1: TDBGrid;
    Label1: TLabel;
    Label2: TLabel;
    Button2: TButton;
    Button3: TButton;
    Label3: TLabel;
    RvRenderHTML1: TRvRenderHTML;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button4: TButton;
    Button5: TButton;
    Label8: TLabel;
    Label9: TLabel;
    RvProject2: TRvProject;
    RvDataSetConnection2: TRvDataSetConnection;
    Label10: TLabel;
    Label11: TLabel;
    Edit5: TEdit;
    Label12: TLabel;
    Edit6: TEdit;
    Label13: TLabel;
    Edit7: TEdit;
    Button6: TButton;
    Button7: TButton;
    Label14: TLabel;
    Label15: TLabel;
    RvProject3: TRvProject;
    RvDataSetConnection3: TRvDataSetConnection;
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    DataSource1: TDataSource;
    Edit8: TEdit;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);   {Показать все записи}
begin
ADOQuery1.Active:=false;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT*From Таблица1');
ADOQuery1.Active:=true;
end;

procedure TForm1.Button2Click(Sender: TObject);  {Запрос 2}
begin
ADOQuery1.Active:=False;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT FName,LName,PhName,City,Street,House,Kv,PhoneNum');
ADOQuery1.SQL.Add('FROM Таблица1');
ADOQuery1.SQL.Add('WHERE PhoneNum='+' "'+ Edit8.Text+'"');
ADOQuery1.Open;
ADOQuery1.Active:=true;
end;

procedure TForm1.Button4Click(Sender: TObject);  {Запрос 3}
begin
ADOQuery1.Active:=False;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT PhoneNum');
ADOQuery1.SQL.Add('FROM Таблица1');
ADOQuery1.SQL.Add('WHERE City='+' "'+Edit1.Text+'"');
ADOQuery1.SQL.Add('AND Street='+' "'+Edit2.Text+'"');
ADOQuery1.SQL.Add('AND House='+' "'+Edit3.Text+'"');
ADOQuery1.SQL.Add('AND Kv='+' "'+Edit4.Text+'"');
ADOQuery1.Open;
ADOQuery1.Active:=true;
//Label9.Caption:=IntToStr
end;

procedure TForm1.Button6Click(Sender: TObject);   {Запрос 4}
begin
ADOQuery1.Active:=False;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT PhoneNum');
ADOQuery1.SQL.Add('FROM Таблица1');
ADOQuery1.SQL.Add('WHERE FName='+' "'+Edit5.Text+'"');
ADOQuery1.SQL.Add('AND LName='+' "'+Edit6.Text+'"');
ADOQuery1.SQL.Add('AND PhName='+' "'+Edit7.Text+'"');
ADOQuery1.Open;
ADOQuery1.Active:=true;
//Label15.Caption:=IntToStr
end;

procedure TForm1.Button3Click(Sender: TObject);  {Отчёт 2}
begin
RvProject1.Execute;
end;

procedure TForm1.Button5Click(Sender: TObject);  {Отчёт 3}
begin
RvProject2.Execute;
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
RvProject3.Execute;
end;

end.
Ответить с цитированием
  #2  
Старый 01.10.2010, 18:48
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Я щас переоденусь, и скину вам образец (свой вариант) работы с MsWord

тока с работы пришёл )
(для делфи 7 с панели Servers Надо вытащить WordApplication1

Так вот: (У меня задача немного другая. У меня предприятие ведёт учёт по некому товару. Месечный приход товара, и меченая реализция его)
например надо создать отчёт с 1го января по 31 января 2009 года, реализации.

Фильтрую (одно из полей содержит даные реализации в виде дд.мм.гггг) Table1.Filter:='Realisation_Date > ''01.01.2009'' AND Realisation_Date < ''31.01.2009'''
Полусаю таблицу в DBGrid1.

А дальше вот как:

Код:
WordApplication1.Connect; (коннектимся к серверу Ворда. В данном случае сервер - это процесс, или ещё проще, запущенный Word)
WordApplication1.Documents.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam); (добавляем в него пустой документ)
WordApplication1.Options.CheckSpellingAsYouType := False; (это оптимизация - отключаем синтаксис)
WordApplication1.Options.CheckGrammarAsYouType := False; (это оптимизация - отключаем грамматику)
WordApplication1.Selection.Font.Size:=12; (шрифт на 12 размер)
WordApplication1.Selection.Font.Name:='Tahoma'; (тахомой)
WordApplication1.Selection.Font.Bold:=Integer(true); (жирненький)
WordApplication1.Selection.ParagraphFormat.Alignment:=wdAlignParagraphRight; (центрирую вправо)
WordApplication1.Selection.InsertAfter('Отчёт о продажах'+#13); (Первое добавление + Enter в конце, чтоб попасть на новую строку)
WordApplication1.Selection.InsertAfter('в период с '+DateToStr(DateTimePicker3.Date)+' по '+DateToStr(DateTimePicker4.Date)+#13); (второе добавление и опять же ентер)
WordApplication1.Selection.Collapse(td); (вот тут внимание: InsertAfter - это процедура которая парарлельно вставке держит весь текст в выделении, чтобы если вдруг понадобиться назначить его новыми свойствами будь то размер шрифта или стиль. Collapse - снимает это выделение. td - переменная в которой храниться куда деть курсор после выделения. Я его пихнул в конец, ибо надо дальше работать...)

var 
   td:OleVariant;
   tseparat:OleVariant;
   tcolumn:OleVariant;
   WFileName:OleVariant;
begin
...
td:=wdCollapseEnd;
tseparat:=wdSeparateByTabs;
tcolumn := 6;
WFileName:='отчёт.doc'

Дальше у меня создаётся таблица разделителем этой таблицы является символ Tab (#9)
таблица изначально выглядит как строка... а потом конвертируется стандартом: ConvertToTable(разделитель, пусто, кол-во колонок в таблице, пусто...)

WordApplication1.Selection.InsertAfter('Артикул'+#9);
WordApplication1.Selection.InsertAfter('Изделие'+#9);
WordApplication1.Selection.InsertAfter('Общий вес (г.)'+#9);
WordApplication1.Selection.InsertAfter('Цена покупки (руб.)'+#9);
WordApplication1.Selection.InsertAfter('Цена продажи (руб.)'+#9);
WordApplication1.Selection.InsertAfter('Прибыль (р.)'+#9);
WordApplication1.Selection.InsertAfter(str);

В str у меня храниться строка виде (Артикул1#9Изделие1#9Общийвес1 и так далее)

WordApplication1.Selection.ConvertToTable(tseparat,EmptyParam,tcolumn,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
WordApplication1.Selection.Collapse(td);

Снова снимаем выделение с таблмицы.
Сохраняем, с одним параметром "куда")


WordApplication1.ActiveDocument.SaveAs(WFileName,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);

WordApplication1.ActiveDocument.Close(EmptyParam, EmptyParam, EmptyParam); (закрываем открытый документ)
WordApplication1.Disconnect; (отключаемся от сервера)

Последний раз редактировалось Uniq!, 01.10.2010 в 19:04.
Ответить с цитированием
  #3  
Старый 01.10.2010, 18:50
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Не знаю, помогу или нет, но думаю следует посмотреть:
http://www.delphi.int.ru/articles/11/ - взаимодействие с вордом
Ответить с цитированием
  #4  
Старый 01.10.2010, 19:29
Аватар для Первокурсница
Первокурсница Первокурсница вне форума
Прохожий
 
Регистрация: 27.02.2010
Сообщения: 46
Репутация: 10
По умолчанию

Всё-всё, я разобралась, Вы мне очень помогли, спасибо =*
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter