
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.193] |
![]() |
|
![]() |
|
|
У меня есть едит. И ворд. В ворде есть текст: @edit1@. Как мне
этот текст (в ворде) заменить на тот, что у меня в едите? |
![]() |
Сообщ.
#2
,
|
|
Сообщ.
#3
,
|
|
|
Читал!!! Не могу понять!!!
|
Сообщ.
#4
,
|
|
|
BIG-VL
вот такой вот мудуль ![]() ![]() unit MyWord; interface //*******************создаём объект ворд**************************************** function CreateWord:boolean; //*******************делаем видимым********************************************* function VisibleWord(Visible:boolean):boolean; //*******************Поиск и замена********************************************* function FindAndReplace(FindText, ReplacementText:string):boolean; //*******************Проверяем, установлен ли ворд****************************** function IsWordInstalled: Boolean; //*******************Открытие документа***************************************** function OpenDocFile(FileWord, Pass:string):boolean; implementation //*******************необходимые модули***************************************** uses ComObj,Registry,Windows; //*******************переменная для работы с объектом*************************** var Word:variant; //*******************создаём объект ворд**************************************** function CreateWord:boolean; begin CreateWord := true; try Word := CreateOleObject('Word.Application'); except CreateWord := False; end; end; //*******************делаем видимым********************************************* function VisibleWord(Visible:boolean):boolean; begin VisibleWord := True; try Word.Visible := Visible; except VisibleWord := False; end; end; //*******************Поиск и замена********************************************* function FindAndReplace(FindText, ReplacementText:string):boolean; const wdReplaceAll=2; begin Word.Selection.Find.Text := FindText; Word.Selection.Find.Replecement.Text := ReplacementText; FindAndInsert := Word.Selection.Find.Execute(Replace := wdReplaceAll); end; //*******************Проверяем, установлен ли ворд****************************** function IsWordInstalled: Boolean; var Reg: TRegistry; s: string; begin Reg := TRegistry.Create; try Reg.RootKey := HKEY_CLASSES_ROOT; Result := Reg.KeyExists('Word.Application'); finally Reg.Free; end; end; //*******************Открытие документа***************************************** function OpenDocFile(FileWord, Pass:string):boolean; const wdOpenFormatTemplate=2; begin Word.Documents.Open(FileName:=FileWord,Format:=wdOpenFormatTemplate, PasswordDocument:= Pass); end; //*******************Конец модуля*********************************************** end. полностью рабочий, писал для собственных нужд... если что н понятно, пиши |
![]() |
Сообщ.
#5
,
|
|
Цитата BIG-VL @ Не могу понять!!! Что именно не понятно? |
Сообщ.
#6
,
|
|
|
хе, так это же мой модуль
![]() и что тебе тогда правда непонятно!!!!!!!!!????????? ![]() |
Сообщ.
#7
,
|
|
|
Блин не могу понять, а что именно не могу сказать потому чо всё! Этот модклю подключаю а дальше?
|
Сообщ.
#8
,
|
|
|
подключаешь модуль, а дальше используешь его функции
![]() ![]() CreateWord; OpenDocFile('путь к файлу',''); FindAndReplace('что нужно заменить','на что нужно заменить'); VisibleWord; |
![]() |
Сообщ.
#9
,
|
|
Цитата BIG-VL @ что именно не могу сказать потому чо всё! ![]() Если пользуешься процедурой tIce - то: ![]() ![]() procedure TForm1.Button1Click(Sender: TObject); begin Word_StringReplace('C:\Test.doc','@edit1@',Edit1.Text, [wrfReplaceAll]); // Замени test.doc на имя своего файла end; |
Сообщ.
#10
,
|
|
|
Цитата dron-s @ подключаешь модуль, а дальше используешь его функции ![]() ![]() CreateWord; OpenDocFile('путь к файлу',''); FindAndReplace('что нужно заменить','на что нужно заменить'); VisibleWord; Во это уже лучше!!! Добавлено Цитата volvo877 @ Если пользуешься процедурой tIce - то: Это я не понял!!! ![]() |
Сообщ.
#11
,
|
|
|
Цитата volvo877 @ что именно не могу сказать потому чо всё! такое чувство, что BIG-VL не имеет не малейшего представления что к чему ![]() |
![]() |
Сообщ.
#12
,
|
|
BIG-VL
![]() |
Сообщ.
#13
,
|
|
|
Цитата BIG-VL @ Во это уже лучше!!! и что, это тоже не работает? |
Сообщ.
#14
,
|
|
|
Цитата volvo877 @ BIG-VL Что, трудно на ник пользователя посмотреть, по той ссылке, которую я тебе дал? Или все время делать тебе Copy+Paste ??? Я смотрел... Цитата dron-s @ такое чувство, что BIG-VL не имеет не малейшего представления что к чему Если честно то да не пойму что к чему!!! ![]() Добавлено Цитата dron-s @ и что, это тоже не работает? Не могу сказать, не проверил ещё!!! Ща проверю и скажу!!! ![]() Добавлено Когда подключил модуль то сказал он ошибка... [Ошибка] myword.pas(46): Undeclared identifier: 'FindAndInsert' в строке ![]() ![]() FindAndInsert := Word.Selection.Find.Execute(Replace := wdReplaceAll); |
Сообщ.
#15
,
|
|
|
Цитата BIG-VL @ Когда подключил модуль то сказал он ошибка... [Ошибка] myword.pas(46): Undeclared identifier: 'FindAndInsert' в строке FindAndInsert := Word.Selection.Find.Execute(Replace := wdReplaceAll); ну дык всё правильно... переправь модуль, а вернее функцию FindAndReplace ![]() ![]() function FindAndReplace(FindText, ReplacementText:string):boolean; const wdReplaceAll=2; begin Word.Selection.Find.Text := FindText; Word.Selection.Find.Replecement.Text := ReplacementText; FindAndReplace := Word.Selection.Find.Execute(Replace := wdReplaceAll); end; |
Сообщ.
#16
,
|
|
|
Ещё ошибка:
[Ошибка] Unit2.pas(353): Not enough actual parameters в строке: ![]() ![]() VisibleWord; |
Сообщ.
#17
,
|
|
|
![]() ![]() VisibleWord(true); так трудно посмотреть на функцию и сделать самому |
Сообщ.
#18
,
|
|
|
Я пока не врюблюсь в делфи, вот учюсь думать по делфи....
![]() |
Сообщ.
#19
,
|
|
|
Цитата BIG-VL @ Я пока не врюблюсь в делфи, вот учюсь думать по делфи.... не пиши полной чуши, а лучше читай УМНЫЕ книги!!!! да внимательнее, а не так что нравится или не нравится!!!!!! что сейчас тоже не работает? |
Сообщ.
#20
,
|
|
|
dron-s то же не работает!!!
![]() Добавлено Я так понял полный путь нужно указать? Ну а у меня документ лежит в папке doc/*.* |
Сообщ.
#21
,
|
|
|
Цитата BIG-VL @ dron-s то же не работает!!! что на этот раз |
Сообщ.
#22
,
|
|
|
пост выше...
|
Сообщ.
#23
,
|
|
|
если у тебя файл лежит в папке doc, папка находится в корне, то пиши так
![]() ![]() CreateWord; OpenDocFile(ExtractFilePath(paramStr(0)) + 'doc\Template.doc',''); FindAndReplace('что нужно заменить','на что нужно заменить'); VisibleWord; |
Сообщ.
#24
,
|
|
|
![]() Говорит что файл открыт!!! Потом вот эта ошибка!!! |
Сообщ.
#25
,
|
|
|
Цитата BIG-VL @ Говорит что файл открыт!!! перерд выполнение процедуры, файл должен быть закрыт!!! Цитата BIG-VL @ Потом вот эта ошибка!!! у меня нет никакой ошибки, всё работает... |
Сообщ.
#26
,
|
|
|
Цитата dron-s @ перерд выполнение процедуры, файл должен быть закрыт!!! Я знаю!!! Он у меня закрыт!!! Может у меня офис то что 2003? |
Сообщ.
#27
,
|
|
|
Не работает!!!
![]() ![]() ![]() |
![]() |
Сообщ.
#28
,
|
|
Цитата BIG-VL @ Не работает!!! Ну, что, этот проект у тебя тоже не работает? Ничего не меняй, просто откомпилируй, запусти и нажми на кнопку! А потом проверь, что содержится в DOC файле... Прикреплённый файл ![]() |
Сообщ.
#29
,
|
|
|
такой вопрос.. компилиться все нормально, но потом при нажати на соотв кнопку выдает ошибку ... Method replacement not supported by automation object.
![]() ![]() procedure TForm1.Button2Click(Sender: TObject); var BookmarkName, Doc, R, Ff_w: OleVariant; begin try MsWord := CreateOleObject('Word.Application'); MsWord.Visible := False; except ShowMessage('Microsoft Word не установлен!'); end; Ff_w:='D:\Pos_Inst\akt.doc'; BookmarkName:='date'; try MsWord.Documents.Open(Ff_w); except ShowMessage('Файл не найден!'); end; MsWord.Selection.Find.Text := '123'; MsWord.Selection.Find.Replecement.Text := 'нашол:))'; {If MsWord.Bookmarks.Exist(BookmarkName) then begin R:=MsWord.Bookmarks.Item(BookmarkName).Range; R.InsertAfter('FUCK');} end; |
Сообщ.
#30
,
|
|
|
Ребята помогите
![]() Мне нужно сделать фтоб с делфи заполнялся бланк в ворде, но он меняет только первое значение а вот уже второе нехочет в чем дело?? ПОдскажите ![]() unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, comobj; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; Edit4: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function zamena(w: variant; poisk, zamslovo: string): boolean; begin W.Selection.Find.Forward:=true; W.Selection.Find.Text:=poisk; if W.Selection.Find.Execute then begin W.Selection.Text:=zamslovo; result:=true; end; end; procedure TForm1.Button1Click(Sender: TObject); var w: variant; begin edit4.Text:=edit1.Text + edit2.Text+ edit3.Text ; w:=createoleobject('word.application') ; w.documents.add('C:\Documents and Settings\User\Рабочий стол\т1.dot') ; if zamena(w, '##1FIO&', edit4.text)=true then showmessage('2') ; if zamena(w, '##6FIO&', edit1.text)=true then showmessage('3') ; w.visible:=true; //w.quit; end; end. |
Сообщ.
#31
,
|
|
|
Попробуй заменить кусок
![]() ![]() function zamena(w: variant; poisk, zamslovo: string): boolean; begin W.Selection.Find.Forward:=true; W.Selection.Find.Text:=poisk; if W.Selection.Find.Execute then begin W.Selection.Text:=zamslovo; result:=true; end; end; на кусок ![]() ![]() function zamena(w: variant; poisk, zamslovo: string): boolean; begin result := False; W.Selection.Find.Forward := true; W.Selection.Find.Text := poisk; while W.Selection.Find.Execute do begin W.Selection.Text := zamslovo; end; result := true; end; |
Сообщ.
#32
,
|
|
|
У меня тоже сейчас подобная проблемка с прогой...
![]() ![]() unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Buttons, StdCtrls, ComObj; type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label2: TLabel; Label3: TLabel; Label5: TLabel; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function zamena(w: variant; poisk, zamena: string): boolean; begin result := False; W.Selection.Find.Forward := true; W.Selection.Find.Text := poisk; while W.Selection.Find.Execute do begin W.Selection.Text := zamena; end; result := true; end; procedure TForm1.Button1Click(Sender: TObject); var W: variant; begin W:=CreateOleObject('Word.Application'); W.Documents.Open(FileName:='D:\ДВ.doc', Readonly:=True); zamena(w, 'XXX', Edit1.Text); zamena(w, 'QQQ', Edit2.Text); zamena(w, 'ZZZ', Edit3.Text); W.Visible:=True; end; procedure TForm1.Button2Click(Sender: TObject); begin Form1.Close; end; end. Когда в поля Edit введены данные заменяется только первое значение, тоисть 'XXX', причем остается выделеным а остальные же, 'QQQ' и 'ZZZ' остаются без изменений. Притом что первые два значения встречаются только по одному разу в документе, а третье около 5, но меняется только 1 а дальнейшие остаются без изменений. Когда поля Edit не заполнены то все значения которые нужно найти тоисть 'XXX', 'QQQ' и 'ZZZ' просто удаляются... помогите разобраться ![]() |
Сообщ.
#33
,
|
|
|
В zamena не мешало бы первым делом устанавливать курсор (selection) в начало документа, иначе Forward-поиск после первой замены может ничего не найти
|
Сообщ.
#34
,
|
|
|
![]() ![]() function zamena(w: variant; poisk, zamena: string): boolean; begin result := False; W.Selection.Start:=0; W.Selection.End:=0; W.Selection.Find.Forward := true; W.Selection.Find.Text := poisk; while W.Selection.Find.Execute do begin W.Selection.Text := zamena; end; result := true; end; В итоге получил что те искомые значения что в тексте появляются однократно заменились. А то что несколько раз встечается в тексте лишь первый раз, дальнейших изменений в тексте не произошло ![]() |
![]() |
Сообщ.
#35
,
|
|
alexandr_fg, а сделать
![]() ![]() function zamena(w: variant; poisk, zamena: string): boolean; begin result := False; W.Selection.Start := 0; W.Selection.End := 0; W.Selection.Find.ClearFormatting; W.Selection.Find.Forward := true; W.Selection.Find.Wrap := 1; // wdFindContinue W.Selection.Find.MatchCase := true; W.Selection.Find.Text := poisk; W.Selection.Find.Replacement.Text := zamena; W.Selection.Find.Execute(Replace := 2); // wdReplaceAll result := true; end; тебе какие-то предрассудки запрещают? Обязательно надо цикл гонять? |
Сообщ.
#36
,
|
|
|
Спасибо огромное, все заработало
![]() |