// ****** DBGrid den EXCEL'de Hazırladığınız Forma Kolayca kayıt. ******
// Şimdi excelde boş bir tablo hazırladığımızı düşünelim. Bu boş tabloda sabit olan bilgiler (Başlık, yazı açıklama) bulunsun. Ayrıca tablomuzdaki hücreler biçimlendirilmiş( font, kenarlık,renk,veri cinsi) olsun.
//Amacımız, boş olan bu tabloyu, DBGrid içindeki bilgilerle doldurmak, sonrada farklı bir isimle kaydetmek. İşte aşağıdaki procedure bu işi yapıyor.
// (Öncelikle verileri olmayan bir excel tablosu hazırlamış ve diskimize kaydetmiş olmamız lazım. Diyelimki bu tablo "C:\Rapor01.xls" dosyası olsun.)
//
// Aşağıdaki procedure 4 adet parametre almaktadır.
// Birinci Parametre Excel formatında kaydedilecek olan DBGrid in adıdır.
// İkinci Parametre boş olarak kaydettiğimiz Excel dosyasının adıdır.
// Üçüncü Parametre Farklı kaydedeceğimiz dosya adıdır.
// Dördüncü Parametre ise bilgilerin hangi hücreden başlanarak aktarılacağını gösteren point türünde bir bilgidir.
//
// ÖRNEK:
// DBGridinizin adı "DBGrid1" olsun.
// Bos ve biçimli tablo dosyamız "C:\Rapor01.xls" olsun.
// Tablonun doldurulmuş halini "C:\Bilgiler.xls" olarak kaydetmek istiyelim.
// Tablo içinde bilgileri 2.Sütün ve 5.Satır dan başlayarak aktaralım.
// Bu durumda procdure in kullanımı kullanımı aşağıdaki gibi olacaktır.
//
// DBGridToExcelForm(DBGrid1, 'C:\Rapor01.xls', 'C:\Bilgiler.xls', Point(2,5));
//
// Kolay Gelsin
// Türker ÖZDEMİR (turkerozdemir@yahoo.com)
//
// Not : Uses Kısmında ComObj eklemeyi unutmayın !!!!!!
procedure DBGridToExcelForm(DBG:TDBGrid; BosRapor:String; DoluRapor:String;IlkHucre:TPoint);
var
EXCEL, WORKBOOK, SHEET:VARIANT;
k1,k2,k3:Integer;
begin
DBGDataset:=DBG.DataSource.DataSet;
k3:=DBGDataset.RecNo;
DBGDataset.DisableControls;
EXCEL := CREATEOLEOBJECT('EXCEL.APPLICATION');
EXCEL.VISIBLE :=False;
WORKBOOK :=EXCEL.WORKBOOKS.Open(BosRapor);
SHEET:=WORKBOOK.WORKSHEETS[1];
Try
DBGDataset.First;
k2:=IlkHucre.Y-1;
While not(DBGDataset.Eof) do
begin
k2:=k2+1;
For k1:=0 to DBG.Columns.Count-1 do
begin
SHEET.CELLS[k2,k1+ IlkHucre.X+k1]:=DBG.Columns[k1].Field.AsString;
end;
DBGDataset.Next;
end;
WORKBOOK.SaveAs(DoluRapor);
ShowMessage('Excell Formatında Kayıt Tamamlandı');
Finally
EXCEL.DisplayAlerts := False;
EXCEL.Quit;
EXCEL:=Unassigned;
DBGDataset.RecNo:=k3;
DBGDataset.EnableControls;
end;
end;
//NOT : "IlkHucre" değişkenini procedure tanımlarken "lkHucre" şeklinde yazmışım, yanlışlık için özür dilerim.