Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi для начинающих

Войти
Регистрация
Восстановить пароль
 
vsz
0 / 0 / 0
Регистрация: 16.02.2015
Сообщений: 6
#1

Заполнение шаблона - Delphi

24.07.2015, 11:41. Просмотров 567. Ответов 2
Метки нет (Все метки)

Здравствуйте, первый раз заполняю шаблон ...по примеру заполнила первую закладку но не знаю как перейти на заполнение следующих... подскажите пожалуйста...
Delphi
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
procedure TForm1.Button2Click(Sender: TObject);
   const
 Fn = '\docs\Рабочий паспорт.dot';//Путь к файлу шаблона относительно папки, в которой лежит исполняемый файл программы.
     BmName ='pasport1' ;
     BmName1='def';
     BmName2 ='history';
     BmName3='kgo' ;
     BmName4='numpasport' ;
     BmName5='pasport2' ;
     BmName6='status' ;
var
 wdApp,  wdDoc, wdBms, wdBm, wdRng, wdTbls, wdTbl, wdRow : Variant;
  i, j, Cnt : Integer;
  FileName: String;
begin
  //Имя закладки MS Word.
 
  if  BmName  = ''  then begin
    MessageBox(Handle, 'Имя закладки MS Word не задано. Действие отменено.'
      ,'Внимание!', MB_OK + MB_ICONEXCLAMATION + MB_APPLMODAL);
    Exit;
  end;
     if  BmName2  = ''  then begin
    MessageBox(Handle, 'Имя закладки MS Word не задано. Действие отменено.'
      ,'Внимание!', MB_OK + MB_ICONEXCLAMATION + MB_APPLMODAL);
    Exit;
  end;
  //Попытка запуска MS Word.
  try
    wdApp := CreateOleObject('Word.Application');
  except
    MessageBox(Handle, 'Не удалось запустить MS Word. Действие отменено.'
      ,'Внимание!', MB_OK + MB_ICONERROR + MB_APPLMODAL);
    Exit;
  end;
  //Путь к файлу шаблона.
  FileName := ExtractFilePath(ParamStr(0)) + Fn;
 
 // wdApp.Visible := True; //Делаем видимым окно MS Word.
  wdDoc := wdApp.Documents.Add(Template:=FileName, NewTemplate:=False); //Создаём новый документ на основе заданного шаблона.
   wdBms := wdDoc.Bookmarks;
 
  //Проверяем, есть ли в документе закладка с заданным именем.
//if not wdBms.Exists(BmName) then begin
//  MessageBox(0, 'В документе нет закладки с именем "' + BmName + '". Действие отменено.'
 //   ,'Внимание!', MB_OK + MB_ICONEXCLAMATION + MB_APPLMODAL);
//  Exit;
//end;
//Ссылка на закладку.
  wdBm := wdBms.Item(BmName);
  //Ссылка на диапазон, связанный с закладкой.
  wdRng := wdBm.Range;
  //Удаление закладки.
  wdBm.Delete;
 
  //Ссылка на коллекцию таблиц.
  wdTbls := wdDoc.Tables;
  //Определеляем, какой таблице принадлежит диапазон закладки.
  wdTbl := Unassigned;
  for i := 1 to wdTbls.Count do
    if wdRng.InRange(wdTbls.Item(i).Range) then begin
      wdTbl := wdTbls.Item(i);
      Break;
    end;
  if VarIsClear(wdTbl) then begin
    MessageBox(0, 'Закладка с именем "' + BmName + '" не принадлежит таблице.'
      + ' Действие отменено.', 'Внимание!', MB_OK + MB_ICONEXCLAMATION + MB_APPLMODAL);
    Exit;
  end;
 
  //Ищем в таблице первую пустую строку.
  wdRow := Unassigned;
  for i := 1 to wdTbl.Rows.Count do begin
    //В конце текста ячейки всегда имеются два специальных символа, обозначающих
    //границу ячейки. Поэтому, если длина текста ячейки равна 2, то эта ячейка пустая.
    j := 1;
    Cnt := wdTbl.Rows.Item(i).Cells.Count;
    while
      (j <= Cnt)
      and (Length(wdTbl.Rows.Item(i).Cells.Item(j).Range.Text) = 2)
    do Inc(j);
    //Если j > Cnt, значит, все ячейки в строке пустые (т. е., мы нашли пустую строку).
    if j > Cnt then begin
      wdRow := wdTbl.Rows.Item(i);
      Break;
    end;
  end;
 
  //Если пустых строк нет, то добавляем в таблицу новую строку.
  if VarIsClear(wdRow) then wdRow := wdTbl.Rows.Add;
 
  //Проверка формата строки.
  if wdRow.Cells.Count < 4 then begin
    MessageBox(0, 'В целевой строке таблицы недостаточно ячеек. Действие отменено.',
      'Внимание!', MB_OK + MB_ICONEXCLAMATION + MB_APPLMODAL);
    Exit;
  end;
   ADOQuery1.first;
   while not ADOQuery1.Eof do begin
  //Записываем в строку данные из программы.
  wdRow.Cells.Item(1).Range.Text := ADOQuery1.FieldByName('idItem').AsInteger;
  wdRow.Cells.Item(2).Range.Text := Edit2.Text;
  wdRow.Cells.Item(3).Range.Text := Edit3.Text;
  wdRow.Cells.Item(4).Range.Text := Edit4.Text;
 
  //Теперь, в верхней левой ячейке таблицы вновь определяем закладку.
  wdBms.Add(BmName, wdTbl.Rows.Item(1).Cells.Item(1).Range);
   ADOQuery1.next ;
   if not ADOQuery1.Eof then wdRow := wdTbl.Rows.Add
       else
 
  wdApp.Visible := True;
  //Если требуется, сохраняем документ.
  //wdDoc.Save;
  //Если требуется, закрываем MS Word.
 end;
end;
  // wdDoc.close;
 // wdApp.Quit;
 // end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.07.2015, 11:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Заполнение шаблона (Delphi):

Заполнение шаблона - Delphi
Здравствуйте, помогите заполнить шаблон ...просмотрела немерено ссылок и окончательно запуталась...шаблоны не разу не заполняла......

Заполнение rtf-шаблона. - Delphi
Приветствую. Из дельфи 5 через переменную типа OLEVariant обращаюсь к rtf - шаблону в котором есть надписи типа {VAR1_1} и т.п. которые...

Заполнение шаблона Word по меткам ,? - Delphi
Всем привет! Ребята такой вопрос накопал код для заполнения документа MSWorD по меткам unit Unit1; interface uses ...

Автоматическое заполнение шаблона MS Word - Delphi
Задумал невозможное(для меня точно невозможное). Необходимо сделать так чтобы при нажатии на кнопку ОФОРМИТЬ ЗАКАЗ И РАСПЕЧАТАТЬ НАКЛАДНУЮ...

Открытие шаблона эксель - Delphi
Необходимо открыть файл экселя (определенный, заготовленный заранее шаблон). При открытии должно задаваться имя, если файл (эксель) с таким...

Прочитать данные из WORD шаблона - Delphi
Столкнулся с задачей считывать заполненные WORD шаблоны заявок и переносить данные из заполненных окон в базу. Если &quot;донести&quot; правильные...

2
Cyborg Drone
Модератор
4711 / 2878 / 1122
Регистрация: 17.08.2012
Сообщений: 9,176
24.07.2015, 13:37 #2
vsz, простите... Это что, продложение вот этой темы: Заполнение шаблона?
0
vsz
0 / 0 / 0
Регистрация: 16.02.2015
Сообщений: 6
30.07.2015, 12:30  [ТС] #3
Сейчас у меня заполняется шаблон ...но есть проблема ...у меня фото помещается на место предыдущей закладки ...нужно поместить внизу таблици на месте метки image .
-еще постоянно не нужные вопросы по поводу сохранения...
Delphi
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
procedure TForm2.Button3Click(Sender: TObject);
const
  Fn = '\docs\Рабочий паспорт.dot';//Путь к файлу шаблона относительно папки, в которой лежит исполняемый файл программы.
  BmName ='pasport1' ;
  BmName1='pasport2' ;
  BmName2 ='history';
  BmName3='kgo' ;
  BmName4='def';
  BmName5='status' ;
  BmName6='numpasport' ;
  BmName7='image' ;
  wdWrapInline = 7;
  wdWrapNone = 3;
  wdWrapSquare = 0;
  wdWrapThrough = 2;
  wdWrapTight = 1;
  wdWrapTopBottom = 4;
 
  var
  wdApp, wdDoc, wdBms, wdBm, wdRng, wdTbls, wdTbl, wdRow, wdSh : Variant;
  j, Cnt, i: Integer;
  FileName : String;
 
procedure PrepareBookmark(aBmName: String; aFieldCount: Integer);
var
  i: Integer;
  lErrorMessage: AnsiString;
begin
  lErrorMessage := 'Закладка с именем "' + aBmName + '" не принадлежит таблице.'+ ' Действие отменено.';
 
  //Ссылка на закладку.
  wdBm := wdBms.Item(aBmName);
  // wdBm := wdBm + '[EditBookmark.name =  " pasport1", . Goto]';
  //Ссылка на диапазон, связанный с закладкой.
  wdRng := wdBm.Range;
  //Удаление закладки.
  wdBm.Delete;
 
  //Ссылка на коллекцию таблиц.
  wdTbls := wdDoc.Tables;
  //Определеляем, какой таблице принадлежит диапазон закладки.
  wdTbl := Unassigned;
  for i := 1 to wdTbls.Count do
    if wdRng.InRange(wdTbls.Item(i).Range) then begin
      wdTbl := wdTbls.Item(i);
      Break;
 
    end;
  if VarIsClear(wdTbl) then begin
    MessageBox(0, PAnsiChar(lErrorMessage), 'Внимание!', MB_OK + MB_ICONEXCLAMATION + MB_APPLMODAL);
    Exit;
  end;
 
  //Ищем в таблице первую пустую строку.
  wdRow := Unassigned;
  for i := 1 to wdTbl.Rows.Count do begin
    //В конце текста ячейки всегда имеются два специальных символа, обозначающих
    //границу ячейки. Поэтому, если длина текста ячейки равна 2, то эта ячейка пустая.
    j := 1;
    Cnt := wdTbl.Rows.Item(i).Cells.Count;
    while
      (j <= Cnt)
      and (Length(wdTbl.Rows.Item(i).Cells.Item(j).Range.Text) = 2)
    do Inc(j);
    //Если j > Cnt, значит, все ячейки в строке пустые (т. е., мы нашли пустую строку).
    if j > Cnt then begin
      wdRow := wdTbl.Rows.Item(i);
      Break;
    end;
  end;
 
  //Если пустых строк нет, то добавляем в таблицу новую строку.
  if VarIsClear(wdRow) then wdRow := wdTbl.Rows.Add;
 
  //Проверка формата строки.
  if wdRow.Cells.Count < aFieldCount then begin
    MessageBox(0, 'В целевой строке таблицы недостаточно ячеек. Действие отменено.',
      'Внимание!', MB_OK + MB_ICONEXCLAMATION + MB_APPLMODAL);
    Exit;
  end;
end; {PrepareBookmark}
 
begin
  //Имя закладки MS Word.
 
 // if  BmName  = ''  then begin
 //   MessageBox(Handle, 'Имя закладки MS Word не задано. Действие отменено.'
   //   ,'Внимание!', MB_OK + MB_ICONEXCLAMATION + MB_APPLMODAL);
   // Exit;
 // end;
 
 
  //Попытка запуска MS Word.
  try
    wdApp := CreateOleObject('Word.Application');
  except
    MessageBox(Handle, 'Не удалось запустить MS Word. Действие отменено.'
      ,'Внимание!', MB_OK + MB_ICONERROR + MB_APPLMODAL);
    Exit;
  end;
  //Путь к файлу шаблона.
  FileName := ExtractFilePath(ParamStr(0)) + Fn;
 
 // wdApp.Visible := True; //Делаем видимым окно MS Word.
  wdDoc := wdApp.Documents.Add(Template:=FileName, NewTemplate:=False); //Создаём новый документ на основе заданного шаблона.
   wdBms := wdDoc.Bookmarks;
 
 
  PrepareBookmark(BmName, 4);
 
 Form1.ADOQuery2.First;
  while not Form1.ADOQuery2.Eof  do begin
    //Записываем в строку данные из программы.
    wdRow.Cells.Item(1).Range.Text := Form1.ADOQuery2.FieldByName('Item').AsString;
    wdRow.Cells.Item(2).Range.Text := Form1.ADOQuery2.FieldByName('Erich').AsFloat;
    wdRow.Cells.Item(3).Range.Text := Form1.ADOQuery2.FieldByName('TipDesc').AsString;
    wdRow.Cells.Item(4).Range.Text := Form1.ADOQuery2.FieldByName('DateIzg').AsDateTime;
 
    //Теперь, в верхней левой ячейке таблицы вновь определяем закладку.
    wdBms.Add(BmName, wdTbl.Rows.Item(1).Cells.Item(1).Range);
    Form1.ADOQuery2.Next;
    if not Form1.ADOQuery2.Eof then wdRow := wdTbl.Rows.Add;
  end;
 
  PrepareBookmark(BmName1, 5);
 
  Form1.ADOQuery2.First;
  while not Form1.ADOQuery2.Eof do begin
    //Записываем в строку данные из программы.
    wdRow.Cells.Item(1).Range.Text := Form1.ADOQuery2.FieldByName('Pasport').AsString;
    wdRow.Cells.Item(2).Range.Text := Form1.ADOQuery2.FieldByName('Batch').AsString;
    wdRow.Cells.Item(3).Range.Text := Form1.ADOQuery2.FieldByName('DatePos').AsDateTime;
    wdRow.Cells.Item(4).Range.Text := Form1.ADOQuery2.FieldByName('TrDoc').AsInteger;
    wdRow.Cells.Item(5).Range.Text := Form1.ADOQuery2.FieldByName('Draw').AsString;
    //Теперь, в верхней левой ячейке таблицы вновь определяем закладку.
    wdBms.Add(BmName, wdTbl.Rows.Item(1).Cells.Item(1).Range);
    Form1.ADOQuery2.Next;
    if not Form1.ADOQuery2.Eof then wdRow := wdTbl.Rows.Add;
  end;
    PrepareBookmark(BmName2, 6);
 
  Form1.ADOQuery4.First;
  while not Form1.ADOQuery4.Eof do begin
    //Записываем в строку данные из программы.
    wdRow.Cells.Item(1).Range.Text := Form1.ADOQuery4.FieldByName('KMPDes').AsString;
    wdRow.Cells.Item(2).Range.Text := Form1.ADOQuery4.FieldByName('DateIn').AsDateTime;
    wdRow.Cells.Item(3).Range.Text := Form1.ADOQuery4.FieldByName('NameCase').AsString;
    wdRow.Cells.Item(4).Range.Text := Form1.ADOQuery4.FieldByName('Burnup').AsInteger;
    wdRow.Cells.Item(5).Range.Text := Form1.ADOQuery4.FieldByName('Loc').AsString;
    wdRow.Cells.Item(6).Range.Text := Form1.ADOQuery4.FieldByName('Penal').AsString;
    //Теперь, в верхней левой ячейке таблицы вновь определяем закладку.
    wdBms.Add(BmName, wdTbl.Rows.Item(1).Cells.Item(1).Range);
    Form1.ADOQuery4.Next;
    if not Form1.ADOQuery4.Eof then wdRow := wdTbl.Rows.Add;
  end;
    PrepareBookmark(BmName3, 8);
 
  Form1.ADOQuery3.First;
  while not Form1.ADOQuery3.Eof do begin
    //Записываем в строку данные из программы.
    wdRow.Cells.Item(1).Range.Text := Form1.ADOQuery3.FieldByName('DateIzmer').AsDateTime;
    wdRow.Cells.Item(4).Range.Text := Form1.ADOQuery3.FieldByName('Cs137').AsFloat;
    wdRow.Cells.Item(6).Range.Text := Form1.ADOQuery3.FieldByName('Metod').AsString;
    wdRow.Cells.Item(7).Range.Text := Form1.ADOQuery3.FieldByName('Klassifikaciy').AsString;
    wdRow.Cells.Item(8).Range.Text := Form1.ADOQuery3.FieldByName('Sertifikat').AsString;
 
    //Теперь, в верхней левой ячейке таблицы вновь определяем закладку.
    wdBms.Add(BmName, wdTbl.Rows.Item(1).Cells.Item(1).Range);
    Form1.ADOQuery3.Next;
    if not Form1.ADOQuery3.Eof then wdRow := wdTbl.Rows.Add;
  end;
 
   PrepareBookmark(BmName6, 1);
 
 Form1.ADOQuery2.First;
 // while not Form1.ADOQuery2.Eof  do begin
    //Записываем в строку данные из программы.
    wdRow.Cells.Item(1).Range.Text := 'Рабочий паспорт';
    wdRow.Cells.Item(2).Range.Text := Form1.ADOQuery2.FieldByName('idItem').AsInteger;
   //nd;
    PrepareBookmark(BmName4, 3);
 
  Form1.ADOQuery5.First;
  while not Form1.ADOQuery5.Eof do begin
    //Записываем в строку данные из программы.
    wdRow.Cells.Item(1).Range.Text := Form1.ADOQuery5.FieldByName('OPKateg').AsString;
    wdRow.Cells.Item(2).Range.Text := Form1.ADOQuery5.FieldByName('Akt').AsString;
    wdRow.Cells.Item(3).Range.Text := Form1.ADOQuery5.FieldByName('Date').AsDateTime;
 
    //Теперь, в верхней левой ячейке таблицы вновь определяем закладку.
    wdBms.Add(BmName, wdTbl.Rows.Item(1).Cells.Item(1).Range);
    Form1.ADOQuery5.Next;
    if not Form1.ADOQuery5.Eof then wdRow := wdTbl.Rows.Add;
 end;
 
 
     // i:= strToint(Edit3.Text)+1  ;
       aPath :='D:\Fuel\Foto\';
      aFile:= aPath+Edit4.Text ;
     //aFile:=aPath+Edit1.Text+'_' + IntTostr(i)+'.jpg';
       if not fileexists( aFile) then
 begin  //st:=0;
 aPath :='D:\Fuel\Foto\';
aFile:=aPath+Edit4.Text+'.JPG';
 
if fileexists( aFile) then
Form2.Image1.Picture.LoadFromFile(aFile);
        if not fileexists( aFile) then
        begin
    MessageBox(0, 'Файл изображения не найден. Действие отменено.',
      'Ошибка', MB_OK + MB_ICONERROR + MB_APPLMODAL);
    Exit;
  end;
 
    //Ссылка на закладку.
    wdBm := wdBms.Item(BmName7);
      wdSh := wdDoc.Shapes.AddPicture(FileName:=aFile,
        LinkToFile:=False, SaveWithDocument:=True, Anchor:=wdRng);
 
      wdSh.Width := 200;
            end;
       wdApp.Visible := True;
  //wdDoc.Save;
  //Если требуется, закрываем MS Word.
//end;
 wdApp.Quit;// finally
 wdApp := Unassigned;
  end;
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2015, 12:30
Привет! Вот еще темы с ответами:

Создание форм из файла шаблона... - Delphi
Доброго времени суток! Господа, я начинающий потому мог упустить некоторые возможности делфи. Возник вопрос, как возможно реализовать так...

прога для заполнения шаблона - Delphi
погите с кодом! нужна прога для заполнения шаблона. должно быть не менее 4 полей для ввода

Как убрать вставку шаблона оператора цикла FOR? - Delphi
Собственно сабж, ибо уже раздражать стало! ]:-&gt; Копался в настройках, но так и не нашёл ничего. Добавлено через 5 минут Всё....

Подскажите начинающему! Ошибка при подключении шаблона Excel - Delphi
Поскажите пожалуйста, что не так в моем запросе. Я пытаюсь создать шаблон и выгружать в него данные с помощью опредленных SQL-запросов......


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru