Sonunda bol uğraş ile istediğimi yaptım ileride lazım olan olur diye paylaşıyorum biraz kod çöplüğü gibi oldu birazda yavaş çalışıyor ama neticede istediğimi veriyor. yardımı ve emeği geçenlere teşekkür ederim
Kod: Tümünü seç
//kullanılan kütüphaneler (uses satırında)
comobj,xlconst,
OleServer,Excel97, Excel2000;
//kullanılan değişken
public
{ Public declarations }
excel:variant;
procedure TfrmIstatistik.RzBitBtn6Click(Sender: TObject);
var
ay,ad,sayfa:string;
ayy:word;
i,son,ilk,kolon:integer;
begin
ilk:=0;
ayy:=MonthOf(datebasla.Date);
case ayy of
1:ay:='OCAK';
2:ay:='ŞUBAT';
3:ay:='MART';
4:ay:='NİSAN';
5:ay:='MAYIS';
6:ay:='HAZİRAN';
7:ay:='TEMMUZ';
8:ay:='AĞUSTOS';
9:ay:='EYLÜL';
10:ay:='EKİM';
11:ay:='KASIM';
12:ay:='ARALIK';
else ay:='';
end;
SaveDialog1.Title:='Dosya Kaydet Penceresi';
SaveDialog1.Filter:='Exel Dosyaları|*.xls|';
ad:=DataModule1.qrADI_SOYADI.Value+'_'+ay+'.xls'; // çalıştığı ayın ismini excel ismine ekle
SaveDialog1.FileName:=ad;
if SaveDialog1.Execute Then
begin
excel:=CreateOleObject('Excel.Application');
excel.Visible:=false;
DataModule1.qrgrup.Close;
DataModule1.qrgrup.Open;
try
begin
DataModule1.qrgrup.First;
while not DataModule1.qrgrup.Eof do
begin
qrvirtual_alim.Filter:='SAYFA_TIPI='''+DataModule1.qrgrupSAYFA_TIPI.Value+'''';
qrvirtual_alim.Filtered:=True;
Application.ProcessMessages;
if DataModule1.qr_hakedis_grupSAYFA_TIPI.Value='A' then sayfa:='Malzeme' else
if DataModule1.qrgrupSAYFA_TIPI.Value='I' then sayfa:='Islem' else
if DataModule1.qrgrupSAYFA_TIPI.Value='Y' then sayfa:='Yeni' else
if DataModule1.qrgrupSAYFA_TIPI.Value='P' then sayfa:='Paket' else
if DataModule1.qrgrupSAYFA_TIPI.Value='F' then sayfa:='ALIM' else
if DataModule1.qrgrupSAYFA_TIPI.Value='O' then sayfa:='ESKI' else
if DataModule1.qrgrupSAYFA_TIPI.Value='N' then sayfa:='Deri' else
if DataModule1.qrgrupSAYFA_TIPI.Value='M' then sayfa:='SEB' else // sayfa isimlerinde boşluk kullanmayın formullerde hata oluşuyor
sayfa:='Diğer'; // sayfa isimleri belirleniyor
if ilk=0 then // excel acilmadi ise ac
begin
excel.workbooks.add;
Excel.ActiveSheet.Name :=sayfa;
ilk:=1;
end else
if ilk=1 then
begin excel.Sheets['Sayfa2'].Select;
Excel.ActiveSheet.Name :=sayfa;
ilk:=2
end else
if ilk=2 then // default olarak 3 sayfa oluşturuyor boş kalmasın diye önce onları kullandım
begin excel.Sheets['Sayfa3'].Select;
Excel.ActiveSheet.Name :=sayfa;
ilk:=3
end else // var olan üç sayfa bittikten sonr ayeni sayfa ekle
begin
excel.Sheets.Add;
Excel.ActiveSheet.Name :=sayfa;
excel.Sheets[sayfa].Select;
end;
font_ayarla;
hucre_duzenle;
excel.ActiveSheet.cells[1,1].value:='TIPI';
excel.ActiveSheet.cells[1,2].value:='D_ADI';
excel.ActiveSheet.cells[1,3].value:='TARIH';
excel.ActiveSheet.cells[1,4].value:='Grup ADI';
excel.ActiveSheet.cells[1,5].value:='Adet';
excel.ActiveSheet.cells[1,6].value:='Islem';
excel.ActiveSheet.cells[1,7].value:='Ucreti';
excel.ActiveSheet.cells[1,8].value:='TL';
excel.ActiveSheet.cells[1,9].value:='Odeme';
excel.ActiveSheet.cells[1,10].value:='%';
excel.ActiveSheet.cells[1,11].value:='ALIŞ';
excel.ActiveSheet.cells[1,12].value:='Ad Soyad';
excel.ActiveSheet.cells[1,13].value:='S_NO';
excel.ActiveSheet.cells[1,14].value:='ALIM_no';
excel.ActiveSheet.cells[1,15].value:='Kurum Adı';
excel.ActiveSheet.cells[1,16].value:='kodu';
qrvirtual_alim.First;
for i:=1 to qrvirtual_alim.RecordCount do
begin
excel.ActiveSheet.Cells[i+1,1].Value:=qrvirtual_alimTIPI.Value; //BURADAKİ İ DATADA OAN KAÇINCI KAYITTA OLDUĞUNU TUTUYOR.
excel.ActiveSheet.Cells[i+1,2].Value:=qrvirtual_alimD_ADI.Value;
excel.ActiveSheet.Cells[i+1,3].Value:=qrvirtual_alimsTARIH.Value;
excel.ActiveSheet.cells[i,3].HorizontalAlignment := -4131;
excel.ActiveSheet.Cells[i+1,4].Value:=qrvirtual_alimGRUP_ADI.Value;
excel.ActiveSheet.Cells[i+1,5].Value:=qrvirtual__alimADET.Value;
excel.ActiveSheet.Cells[i+1,6].Value:=qrvirtual_alimISLEM.Value;
excel.ActiveSheet.Cells[i+1,7].Value:=qrvirtual_alimUCRETI.Value;
excel.Cells[i,7].numberformat:='#.##0,00 TL';
excel.ActiveSheet.Cells[i+1,8].Value:=qrvirtual_alimTL.Value;
excel.ActiveSheet.Cells[i+1,9].Value:=qrvirtual_alimodeme.Value;
excel.ActiveSheet.Cells[i+1,10].Value:=qrvirtual_alimYUZDE.Value;
excel.ActiveSheet.Cells[i+1,11].Value:=qrvirtual_alimALIS.Value;
excel.Cells[i,11].numberformat:='#.##0,00 TL'; // para formatında yaz
excel.ActiveSheet.Cells[i+1,12].Value:=qrvirtual_alimADSOYAD.Value;
excel.ActiveSheet.Cells[i+1,13].Value:=qrvirtual_alimS_NO.Value;
excel.ActiveSheet.Cells[i+1,14].Value:=qrvirtual_alimALİM_NO.Value;
excel.ActiveSheet.Cells[i+1,15].Value:=qrvirtual_alimKURUM_ADI.Value;
excel.ActiveSheet.Cells[i+1,16].Value:=qrvirtual_alimKODU.Value;
excel.Cells[i+1,1].Borders.Color := clgray; // hücreleri çerçevelendir.
excel.Cells[i+1,2].Borders.Color := clgray;
excel.Cells[i+1,3].Borders.Color := clgray;
excel.ActiveSheet.cells[i+1,3].HorizontalAlignment := -4131; // sola yasla
excel.Cells[i+1,4].Borders.Color := clgray;
excel.Cells[i+1,5].Borders.Color := clgray;
excel.Cells[i+1,6].Borders.Color := clgray;
excel.Cells[i+1,7].Borders.Color := clgray;
excel.Cells[i+1,7].numberformat:='#.##0,00 TL';
excel.Cells[i+1,8].Borders.Color := clgray;
excel.Cells[i+1,9].Borders.Color := clgray;
excel.Cells[i+1,10].Borders.Color := clgray;
excel.Cells[i+1,11].Borders.Color := clgray;
excel.Cells[i+1,11].numberformat:='#.##0,00 TL';
excel.Cells[i+1,12].Borders.Color := clgray;
excel.Cells[i+1,13].Borders.Color := clgray;
excel.Cells[i+1,14].Borders.Color := clgray;
excel.Cells[i+1,15].Borders.Color := clgray;
excel.Cells[i+1,16].Borders.Color := clgray;
qrvirtual_alim.Next;
end;
for i:=1 to 17 do excel.Cells[1,i].EntireColumn.AutoFit; //oto hücre genişlet
son:=(excelsonsatir(9)+1); // son satiri bul
excel.Cells[son,9]:='Toplam:';
excel.Cells[son,9].font.bold:=True;
excel.Cells[son,9].ColumnWidth:=10;
excel.Cells[son,11].Formula:='=Sum(K2:K'+inttostr(son-1)+')'; // en son satırdan sonra dip toplam ekle
excel.Cells[son,11].font.bold:=True;
excel.Cells[son,11].EntireColumn.AutoFit;
if ilk=1 then /// tüm sayfaların dip toplamlarının olduğu yeni bir sayfa ekle
begin
excel.Sheets.Add;
Excel.ActiveSheet.Name :='Toplam';
excel.Sheets['Toplam'].Select;
excel.ActiveSheet.Cells[3,2].Value:=Sayfa+' Toplam: ';
excel.ActiveSheet.Cells[3,2].font.bold:=True;
excel.ActiveSheet.Cells[3,2].EntireColumn.AutoFit;
excel.ActiveSheet.Cells[3,3].formula:='='+sayfa+'!K'+inttostr(son);
excel.ActiveSheet.Cells[3,3].font.bold:=True;
excel.ActiveSheet.Cells[3,3].EntireColumn.AutoFit;
excel.ActiveSheet.Cells[3,3].numberformat:='#.##0,00 TL';
kolon:=4;
end else begin // toplam sayfası var ise var olan sayfanın dip toplamını yeni sayfaya sayfa ismi ile ekle
excel.Sheets['Toplam'].Select;
excel.ActiveSheet.Cells[kolon,2].Value:=Sayfa+' Toplam: ';
excel.ActiveSheet.Cells[kolon,2].font.bold:=True;
excel.ActiveSheet.Cells[kolon,2].EntireColumn.AutoFit;
excel.ActiveSheet.Cells[kolon,3].formula:='='+sayfa+'!K'+inttostr(son);
excel.ActiveSheet.Cells[kolon,3].font.bold:=True;
excel.ActiveSheet.Cells[kolon,3].EntireColumn.AutoFit;
excel.ActiveSheet.Cells[kolon,3].numberformat:='#.##0,00 TL';
kolon:=kolon+1;
end;
DataModule1.qrgrup.Next;
end;
excel.Sheets['Toplam'].Select; // toplam saysasını etkinleştir
son:=(excelsonsatir(3)+1); // tüm sayfa toplamlarının en son satırını bul ve genel toplam olarak dip toplam ekle
excel.Cells[son+1,2]:='Toplam:';
excel.Cells[son+1,2].font.bold:=True;
excel.Cells[son+1,2].EntireColumn.AutoFit;
excel.Cells[son+1,3].Formula:='=Sum(C3:C'+inttostr(son-1)+')';
excel.Cells[son+1,3].font.bold:=True;
excel.Cells[son+1,3].EntireColumn.AutoFit;
end;
finally
// Excel dosyası kapatılıyor.
Excel.ActiveWorkBook.SaveAs(SaveDialog1.FileName); // active excel sayfasını kaydet
// excel.visible:=true;
ShowMessage('Işlem Tamam, Veri export edildi.');
end;
qrvirtual_alis.Filtered:=False;
excel.quit; // exceli kapat
end;
end;
//kullandiğim fonksiyon ve procedurler
procedure TfrmIstatistik.hucre_duzenle;
var
Range: Variant;
begin
//Sayfa1 deki C1 ile F25 arasını seç
Range := excel.Workbooks[1].WorkSheets[excel.activesheet.name].Range['A1:P1'];
//Sayfa1 deki C1 ile F25 arasındaki hücrelere RAND() formülü yerleştir.
//Range.Formula := '=RAND()';
//Sayfa1 deki C1 ile F25 arasındaki hücrelerin rengini değiştir
Range.Columns.Interior.Colorindex := 15; //gri
Range.Borders.LineStyle := xlContinuous;
end;
procedure TfrmIstatistik.font_ayarla;
var
Range: Variant;
begin
Range := excel.Workbooks[1].WorkSheets[excel.activesheet.name].Range['A1:P1000'];
range.columns.font.size:=8;
range.columns.font.name:='MS Sans Serif';
end;
function TfrmIstatistik.excelsonsatir(AColumn: Integer): Integer;
const
xlUp = 3;
begin
Result := excel.Range[Char(96 + AColumn) + IntToStr(65536)].end[xlUp].Rows.Row;
end;
end.