Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
emrah24
Üye
Mesajlar: 21 Kayıt: 02 Eyl 2018 05:36
Mesaj
gönderen emrah24 » 02 Eyl 2018 05:40
Merhaba arkadaşlar Delphi konusunda çok fazla tecrüben yok. Kendimi geliştirmeye çalışıyorum. Bir konuda yardıma ihtiyacım var.
Şimdi aşağıdaki kodlarla worda aktarım sağlıyorum. Ancak bilgisayarda ya word yada open office yüklü.
Microsoft yüklü ise sorun yok ancak Open Office yüklü olan Pc'lerde Çalışmıyor.
Bu konuda yardımcı olursanız çok sevinirim
KOD YAPISI ŞÖYLE :
Kod: Tümünü seç
uses
ComObj;
// Replace Flags
type
TWordReplaceFlags = set of (wrfReplaceAll, wrfMatchCase, wrfMatchWildcards);
function Word_StringReplace(ADocument: TFileName; SearchString, ReplaceString: string; Flags: TWordReplaceFlags): Boolean;
const
wdFindContinue = 1;
wdReplaceOne = 1;
wdReplaceAll = 2;
wdDoNotSaveChanges = 0;
var
WordApp: OLEVariant;
begin
Result := False;
{ Check if file exists }
if not FileExists(ADocument) then
begin
ShowMessage('Specified Document not found.');
Exit;
end;
{ Create the OLE Object }
try
WordApp := CreateOLEObject('Word.Application');
except
on E: Exception do
begin
E.Message := 'Word is not available.';
raise;
end;
end;
try
{ Hide Word }
WordApp.Visible := False;
{ Open the document }
WordApp.Documents.Open(ADocument);
{ Initialize parameters}
WordApp.Selection.Find.ClearFormatting;
WordApp.Selection.Find.Text := SearchString;
WordApp.Selection.Find.Replacement.Text := ReplaceString;
WordApp.Selection.Find.Forward := True;
WordApp.Selection.Find.Wrap := wdFindContinue;
WordApp.Selection.Find.Format := False;
WordApp.Selection.Find.MatchCase := wrfMatchCase in Flags;
WordApp.Selection.Find.MatchWholeWord := False;
WordApp.Selection.Find.MatchWildcards := wrfMatchWildcards in Flags;
WordApp.Selection.Find.MatchSoundsLike := False;
WordApp.Selection.Find.MatchAllWordForms := False;
{ Perform the search}
if wrfReplaceAll in Flags then
WordApp.Selection.Find.Execute(Replace := wdReplaceAll)
else
WordApp.Selection.Find.Execute(Replace := wdReplaceOne);
{ Save word }
WordApp.ActiveDocument.SaveAs(ADocument);
{ Assume that successful }
Result := True;
{ Close the document }
WordApp.ActiveDocument.Close(wdDoNotSaveChanges);
finally
{ Quit Word }
WordApp.Quit;
WordApp := Unassigned;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Word_StringReplace('C:\Test.doc','Old String','New String',[wrfReplaceAll]);
end;
En son
emrah24 tarafından 03 Eyl 2018 12:34 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
mkysoft
Kıdemli Üye
Mesajlar: 3103 Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:
Mesaj
gönderen mkysoft » 03 Eyl 2018 09:54
Kodlarınızda zaten WordApp kullanacağınızı belirtmişsiniz. Open Office ile Microsoft Office birbirinden tamamen bağımsız ve farklı ürünlerdir. Open Office'in com desteği var mı bilmiyorum, eğer varsa onun için ayrıca kod yazmanız gerekir. Office'e bağımlı kalmadan word belgeleri üretebilen native uygulamalara bakabilirsiniz.
emrah24
Üye
Mesajlar: 21 Kayıt: 02 Eyl 2018 05:36
Mesaj
gönderen emrah24 » 03 Eyl 2018 10:05
mkysoft Teşekkür ederim.
Office'e bağımlı kalmadan word belgeleri üretebilen native uygulamalara bakabilirsiniz.
nasıl arama yapmam gerekiyor sonuca erişebilmek adına.
Aslında yapmak istediğim işlem için farkı bir yol var mı onu bilmiyorum.
hazır bir word belgesinde OLE kullanmadan find and replace yapmam lazım
freeman35
Admin
Mesajlar: 2356 Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı
Mesaj
gönderen freeman35 » 03 Eyl 2018 11:04
-Mesaj başlığında ufak harf kullan
-Mesaj içeriğinde tag ları kullan ki daha okunur ve anlaması kolay olsun
ZAGOR TENAY TÜRK 'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
F r e e M a n 3 5 .5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
emrah24
Üye
Mesajlar: 21 Kayıt: 02 Eyl 2018 05:36
Mesaj
gönderen emrah24 » 03 Eyl 2018 12:34
freeman35 yazdı: ↑ 03 Eyl 2018 11:04
-Mesaj başlığında ufak harf kullan
-Mesaj içeriğinde tag ları kullan ki daha okunur ve anlaması kolay olsun
Teşekkürler
mkysoft
Kıdemli Üye
Mesajlar: 3103 Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:
Mesaj
gönderen mkysoft » 03 Eyl 2018 01:46
"delphi native docx reader writer" şeklinde arama yapabilirsiniz.
emrah24
Üye
Mesajlar: 21 Kayıt: 02 Eyl 2018 05:36
Mesaj
gönderen emrah24 » 03 Eyl 2018 03:24
yapamadım. ancak farklı bir yol buldum. Burda da başka sıkıntı var. Prosudür var ama bunda da birden fazla değişiklik olmuyor.
sadece ilk gelen değişikliği yapıyor sonra her işlem için ayrı ayrı dosya açıyor.
Çözemedim bir türlü yardımcı olursanız sevinirim.
Kod: Tümünü seç
procedure OpenOfficeReplace(const AFileURL: string; ASearch: string; const AReplace: string);
var
StarOffice: Variant;
StarDesktop: Variant;
StarDocument: Variant;
FileReplace: Variant;
FileParams: Variant;
FileProperty: Variant;
begin
StarOffice := CreateOleObject('com.sun.star.ServiceManager');
StarDesktop := StarOffice.CreateInstance('com.sun.star.frame.Desktop');
FileParams := VarArrayCreate([0, 0], varVariant);
FileProperty := StarOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
FileProperty.Name := 'Hidden';
FileProperty.Value := False;
FileParams[0] := FileProperty;
StarDocument := StarDesktop.LoadComponentFromURL(AFileURL, '_blank', 0, FileParams);
FileReplace := StarDocument.CreateReplaceDescriptor;
FileReplace.SearchCaseSensitive := False;
FileReplace.SetSearchString(ASearch);
FileReplace.SetReplaceString(AReplace);
StarDocument.ReplaceAll(FileReplace);
//ShowMessage('Replace has been finished');
StarDocument.Close(True);
StarDesktop.Terminate;
StarOffice := Unassigned;
end;
Kullanımım Şöyle
Kod: Tümünü seç
OpenOfficeReplace(Pchar(yoltemiz),'[adres]',Pchar(adres));
OpenOfficeReplace(Pchar(yoltemiz),'[telefon]',Pchar(adres));
OpenOfficeReplace(Pchar(yoltemiz),'[ililce]',Pchar(ililce));
emrah24
Üye
Mesajlar: 21 Kayıt: 02 Eyl 2018 05:36
Mesaj
gönderen emrah24 » 03 Eyl 2018 10:05
okuyan arkadaş olursa buradaki hatayı buldum. procedure dosyadaki metni değiştirip açıyor. Yani Kaydetmeden açıyor. Bir Sonrakine geçince salt okunur açıyor.
Şuan tek istediğim bu procedure de word deki gibi visible çalışması ve kaydetmesi lazım ki bir sonraki replace işini düzgün yapsın
StarDocument.StoreAsURL('file:///D:/test.doc', FileParams);
vd deniyorum hep hata veriyor
emrah24
Üye
Mesajlar: 21 Kayıt: 02 Eyl 2018 05:36
Mesaj
gönderen emrah24 » 07 Eyl 2018 04:26
mkysoft yazdı: ↑ 03 Eyl 2018 01:46
"delphi native docx reader writer" şeklinde arama yapabilirsiniz.
Hocam kaç gündür uğraşıyorum çözemedim ben bu işi
kesinlikle microsoft/openoffice olmadan bu belgerde replace yapmam lazım.
mkysoft
Kıdemli Üye
Mesajlar: 3103 Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:
Mesaj
gönderen mkysoft » 07 Eyl 2018 05:35
Delphi tarafında bir tecrübem bulunmuyor, C# tarafında kütüphaneler kullanmayı denemiş stabil bir çözüm bulamayınca sunucuya office lisansı satın almıştık.
emrah24
Üye
Mesajlar: 21 Kayıt: 02 Eyl 2018 05:36
Mesaj
gönderen emrah24 » 07 Eyl 2018 07:48
mkysoft yazdı: ↑ 07 Eyl 2018 05:35
Delphi tarafında bir tecrübem bulunmuyor, C# tarafında kütüphaneler kullanmayı denemiş stabil bir çözüm bulamayınca sunucuya office lisansı satın almıştık.
teşekkürler ilginize