Форум по 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.
Никаких указаний и подсказок он не дал!
Помогите пожалуйста!
Вот текст программы:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
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.

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

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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 - переменная в которой храниться куда деть курсор после выделения. Я его пихнул в конец, ибо надо дальше работать...)
 
<b>var
   td:OleVariant;
   tseparat:OleVariant;
   tcolumn:OleVariant;
   WFileName:OleVariant;
begin
...
td:=wdCollapseEnd;
tseparat:=wdSeparateByTabs;
tcolumn := 6;
WFileName:='отчёт.doc'
</b>
Дальше у меня создаётся таблица разделителем этой таблицы является символ 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, время: 16:08.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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