Tabloyu Word Ve Excel'e Gönderme

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Tabloyu Word Ve Excel'e Gönderme

Mesaj gönderen Fatih! »

Öncelikle http://sourceforge.net/projects/tpofficepartner/ adresinden Office Partner Componentini indirip Kurun.Kullanımı Ücretsiz Bir Component. Kurduuktan Sonra Component Palette OfficePartner sekmesiyle yerini alacaktır. Bu bileşenleri kullanartak kolaylıkla Word ve Excel'e veri aktarabiliriz.



Tabloyu Word'e Gönderme
Bildiğiniz Şekilde Veritabanı Bağlantınızı Yapın. Component Palette OfficePartner sekmesinde bir Opword birde OpDataSetModel Bileşeni Varsayılan adlarıyla bırakıyorum.

Tablomu Worde aktaracak bileşenimin adı ibquery1. sizinki table1,query1,adoquery1 vb. olabilir.

Opword ve OpdatasetModel bileşenlerinin özellikleriyle oynamanıza gerek yok Herşeyi Kodla Halledeceğiz. Öncelikle Aşağıdaki Değişkeni Tanımlayın.

Kod: Tümünü seç

var
Form1: TForm1;
MergeDoc: TOpWordDocument; //Değişkenimiz. 


Daha Sonra Uygulamamız Kapatıldığında Wordle Bağlantımızı Kesildiğini Garantilemek için Formun OnClose Olayına Aşağıdaki Kodu Yazın


Kod: Tümünü seç

if Assigned(MergeDoc) then //Word Daha Önce Açılmışsa
MergeDoc.Free; //Word'ü Kapat
if OpWord1.Connected=true then //Word'e Bağlıysa 
OpWord1.Connected:=false; //Bağlantıyı Kes
 


Aşağıdaki Kodda Verileri Word'e gödermemizi sağlıyor. Ben Buttonun OnClick Olayına Yazdım.


Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
//Worde Aktaracağımız Tabloyu OpDataSetModel Bileşeninin
//Dataset özelliğine Aktarıyoruz
OpDataSetModel1.Dataset:=IBQuery1;
if Assigned(MergeDoc) then //Word Daha Önce Açılmışsa
MergeDoc.Free; //Word'ü Kapat
if OpWord1.Connected=true then //Word'e Bağlıysa 
OpWord1.Connected:=false; //Bağlantıyı Kes
ibquery1.Active:=true; //Tabloyu Aç
OpWord1.Connected := True; //Word'e Bağlan
OpWord1.DisplayScrollBars:=true; //Word'de Kaydırma Çubukları Görünsün
OpWord1.Visible := False; //Word'ü Gizle
MergeDoc := OpWord1.NewDocument; //Yeni Word Belgesi Aç
OpWord1.Visible := True; //Word'ü Göster
Opword1.WindowState:=wdwsMaximized; //Word'ü Tam Ekran Olarak Göster
//Tabloyu Word'e Aktar
with OpWord1.Documents[0].Tables.Add do
begin
OfficeModel :=OpDatasetModel1;
PopulateDocTable;
end;
ibquery1.Active:=false; //Tabloyu Aç
end;


Tabloyu Excel'e Gönderme
Bildiğiniz Şekilde Veritabanı Bağlantınızı Yapın. Component Palette OfficePartner sekmesinde bir OpExcel birde OpDataSetModel Bileşeni Varsayılan adlarıyla bırakıyorum.

Tablomu Excel'e aktaracak bileşenimin adı ibquery1. sizinki table1,query1,adoquery1 vb. olabilir.

OpExcel ve OpdatasetModel bileşenlerinin özellikleriyle oynamanıza gerek yok Herşeyi Kodla Halledeceğiz. Öncelikle Aşağıdaki Değişkeni Tanımlayın.


Kod: Tümünü seç

var
Form1: TForm1;
NewBook:TopExcelWorkBook;


Aşağıdaki Kodu OpExcel Bileşeninin BeforeWorkBookClose Olayınada yazın.


Kod: Tümünü seç


if Assigned(NewBook:) then //Excel Daha Önce Açılmışsa
NewBook:.Free; ///Excel'i Kapat
if OpExcel1.Connected=true then //Excel 'e Bağlıysa 
OpExcel1.Connected:=false; //Bağlantıyı Kes
 


Daha Sonra Uygulamamız Kapatıldığında Excelle Bağlantımızı Kesildiğini Garantilemek için Formun OnClose Olayına Aşağıdaki Kodu Yazın.

Kod: Tümünü seç

if OpExcel1.Connected=true then //Excel 'e Bağlıysa 
OpExcel1.Connected:=false; //Bağlantıyı Kes
 




Aşağıdaki Kodda Verileri Excel 'e gödermemizi sağlıyor. Ben Buttonun OnClick Olayına Yazdım.

Kod: Tümünü seç


procedure TForm1.Button1Click(Sender: TObject);
var
Rng : TOpExcelRange;
begin
OpExcel1.Connected := True; //Excel'e Bağlan
OpExcel1.Visible := True; //Excel'i Göster
OpExcel1.WindowState:=xlwsMaximized; //Excel'i Tam Ekran Olarak Göster
IBQuery1.Active:=true; //Tabloyu Aç
NewBook:=OpExcel1.Workbooks.Add; //Yeni Excel Belgesi Aç ü
//Ayarları Yap
Rng := OpExcel1.Workbooks[0].Worksheets[0].Ranges.Add;
Rng.Name := 'www.delphidunyasi.com'; //Keyfinize Göre Bir isim Verin
Rng.Address := 'A1';
Rng.OfficeModel :=OpDataSetModel1; //Kaynak OpDataSetModel Bileşeni
//Excele Aktaracağımız Tabloyu OpDataSetModel Bileşeninin
//Dataset özelliğine Aktarıyoruz
OpDataSetModel1.Dataset :=IBQuery1;
OpExcel1.RangeByName['www.delphidunyasi.com'].Populate; //Tabloyu Aktar
OpExcel1.Workbooks[0].Worksheets[0].Activate; //Exceli Aktif Pencere yap
Rng.AsRange.Columns.AutoFit; //Kolon Genişlikleri Otomatik
IBQuery1.Active:=false; //Tabloyu Kapat
end;


Not : Alan Adlarını Field Editorden DisplayFormat Özelliği ile istediğiniz gibi değiştirebilirsiniz. örneğin alan adı DOGUM_TARIHI ise alanın DisPlayFormat özelliğine Doğum Tarihi Yazarsanız alan adı DisPlayFormat özelliğinde olduğu gibi görünür
Kullanıcı avatarı
bluefire
Üye
Mesajlar: 29
Kayıt: 02 Ağu 2005 03:32

eline sağlık...

Mesaj gönderen bluefire »

bende bu işi nasıl yaparız diye aklımı kurcalıyordu...
ama size bir sorum var...mesela kendi oluşturduğumuz word stil sayfaları sanırım (Hani normal.doc sayfası tarzı varya) buraya nasıl aktarırız verilerimizi...ve tabi aktardığımız veriler rapor tarzında istediğimiz alan istediğimiz yere gelecek şekilde bu konu hakkında bilgi verirseniz sevinirim...çalışmalarınızın ve başarılarınızın devamını dilerim...
bilgi herşeye değer...
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

Maalesef bu konuda hiç uğraşmadım. Componentin pdf'sinde anlatmış olabilirler
Kullanıcı avatarı
veliadiguzel
Üye
Mesajlar: 197
Kayıt: 09 Tem 2003 02:11
Konum: Gebze/Kocaeli
İletişim:

Mesaj gönderen veliadiguzel »

S.A.

Arkadaşlar çok güzel ve kullanışlı ama tersini yapabilen varmı bu bileşenle
PropDirection var ama
hata veriyor

Kod: Tümünü seç

pdFromServer 
pdToserver
bu şekilde kullanan oldumu hiç.
fikaxxx
Üye
Mesajlar: 22
Kayıt: 09 Ara 2005 11:02

Mesaj gönderen fikaxxx »

teşekkürler @FAOsoft componentler çok güzel ve hızlı çalışıyor yalnız tabledan aktarılacak alanları biz nasıl belirleriz bunun bir yolu varmı acaba tablodaki tüm alanların değilde benim belirlediğim alanları nasıl görünteleriz yardım ederseniz sevinirim..
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

yanlış hatırlamıyorsam field editor'den visible=false yada alanı siliyordunuz
fikaxxx
Üye
Mesajlar: 22
Kayıt: 09 Ara 2005 11:02

Mesaj gönderen fikaxxx »

FAOsoft yazdı:yanlış hatırlamıyorsam field editor'den visible=false yada alanı siliyordunuz

field editor olarak Table ın editorünü kastediyorsanız orda zaten alanlar seçili değil ancak seçili yapıpda istenmeyenleri false yaptığımızda da excele atıyor. OpExcel veya OpDataSetModel bileşenlerinin bununla ilgili bir özelliği varmı diye karıştırdım ama yapamadım yardımlarınızı bekliyorum
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

öyle bir özelliği yok, ancak field editordan istemediğiniz alanları silerek halledebilirsiniz sanırım
fikaxxx
Üye
Mesajlar: 22
Kayıt: 09 Ara 2005 11:02

Mesaj gönderen fikaxxx »

teşekkürler son denememda field editorden silince oldu yardımlarınız için saol
memoli79
Üye
Mesajlar: 29
Kayıt: 05 Nis 2007 01:29

OfficePartner component kurulumu hakkında

Mesaj gönderen memoli79 »

arkadaşlar bu componenti nsıl kuracağım yardım edermisiniz.

Componenti indirdim ama kurulumu yapamadım daha doğrusu birşeyler yaptım ama componentler menüsüne getirecemdim.

adım adım nasıl yapacığmı anlatırsanız çok sevinirim
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

kompanentler delphiye geliyor ama dcu hatası alıyorum ve şu şekilde kurdum (delphi7 kullanıyorum)

1-zip dosyasını masa üstüne açtım
2-delphiden Tools>Environment>Libray>Libary path yolunu masa üstündeki açtığım dosyanın packages dosyasını seçtim
3-masa üstündeki dosyadan packages den P164_R70.dpk ve P164_D70.dpk çalıştırıp copile instal yapıyorum kompanetler geliyor Fatih hocamın uygulamasını yapayım dedim dcu hatası alıyorum örneğin

Kod: Tümünü seç

Build
  [Fatal Error] Giris.pas(22): File not found: 'OpModels.dcu'
  [Fatal Error] Giris.pas(22): File not found: 'OpModels.dcu'
hata nerede anladım daha öncede bu yöntemle yüklemeler yapmıştım
algoritma
Üye
Mesajlar: 34
Kayıt: 01 Kas 2005 03:44

Mesaj gönderen algoritma »

hocam delphi7 kullaniyorum verdiğin linkten indirdim componenti sourceden exel.pas ibuldum install component dedim ama anlayamadim yapamadim sanirim yardimci olurmusun
Kullanıcı avatarı
sunye
Üye
Mesajlar: 105
Kayıt: 24 Ağu 2004 04:49
Konum: izmir

Mesaj gönderen sunye »

S.A.

DBGrid'deki alanların hepsini belirttiğiniz yöntem ile Excel'e aktarılıyor ancak 18 basamaklı bir sayısal alanı Excel'e aktarırken ilk 15 basamağını alıyor ve son 3 basamak Excel içerisinde 000 oluyor bunu nasıl düzeltebilirim.

Forumdaki bütün Excel'e aktarım yöntemlerini denedim. XML dosyayı direk Excel 2003 ve 2007 ile açtığım zamanda aynı sorunla karşılaşıyorum.

Benim çözüm için düşüncem şu;
Bu alandaki veriler aktarılırken String'e çevirilebilir (@naile bu konuda '@' işaretinin excel'de string'e karşılık geldiğini yazmış ama kullanırken yine aynı şekilde sayısal değer gibi görüyor ya da ben yapamadım) ya da aktarımdan önce ' ( metin:='''' + sayısal_alan; şeklinde ) işareti eklenir ki buda string bir yapı olur. Şimdi geriye kalan bu işlemi koda dökmek. Şu anda bunun için çalışıyorum biter bitmez paylaşacağım. Benden önce çözen olurda paylaşırsa sevinirim.
Bildiğim tek şey, hiç bir şey bilmediğim.
memoli79
Üye
Mesajlar: 29
Kayıt: 05 Nis 2007 01:29

Re: Tabloyu Word Ve Excel'e Gönderme

Mesaj gönderen memoli79 »

Arkadaşlar bu kodları yazınca DCU hatası alıyorum.
Uses' a ne eklemeliyim.

Yardımlarınız için teşekkürler.

İyi çalışmalar.
yalo07
Üye
Mesajlar: 4
Kayıt: 08 Kas 2010 02:31

Re: Tabloyu Word Ve Excel'e Gönderme

Mesaj gönderen yalo07 »

fatih hoca bilgiler için saol faydalı oldu.ama benim sorunum programı kapattığımda excel ve wordde kapanıyor ben bağımsız şekilde açık kalmasını istiyorum?
Cevapla