cxgrid excele sayfa sayfa export nasıl yapılır.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
diseqc
Üye
Mesajlar: 48
Kayıt: 21 May 2009 04:03

cxgrid excele sayfa sayfa export nasıl yapılır.

Mesaj gönderen diseqc »

merhaba;
yaptığım programda bir gridin içerisinde verileri

Kod: Tümünü seç

  ExportGrid4ToExcel(SaveDialog1.FileName,cxgrid4,true,true,true,'xls'); 
kodu ile excele export ediyorum ancak istediğim şu ki bu gridin içinde olan verileri tek excel belgesinde 3 yada durma göre 4 sayfaya export etmek istiyorum yani aynı excel belgesi içierinde 4 ayrı sayfada export etmek istiyorum toad yazılımı excele export ederken SQL sorgusunu ayrı bir sayfada, sorgu neticesinde gelen veriyi ayrı bir sayfaya tek seferde export ediyor. quantum gridin böyle bir özzelliği varmı yada delphi ile ayrıcamı kod yazmak lazım,

Konu hakkında firikleri olanlar yardım ederse sevinirim zira iki gündür aryorum kayda değer bir bilgi bulamadım.
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: cxgrid excele sayfa sayfa export nasıl yapılır.

Mesaj gönderen Lord_Ares »

Yanlış anlamadıysam, grid içindeki verileri exceldeki tek bir çalışma kitabına sayfa sayfa atsın istiyorsun. Eğer öyle ise şöyle yapabilirsin.
1) veritabanındaki bilgi sayısını bul ve bunu exceldeki hücre sayısına böl. Böylece kaç sayfa oluşturman gerektiğini buluyorsun( excelde sanırım tek sayfada 6500 satır vardır bir excel dosya açarak öğrenebilirsin)
2) Açılmış olan excel çalışma kitabında kaç sayfa olduğunu bul ki sayfa eklemen gerekiyor mu bil.

//Excel dosyasında kaç tane sayfa var kaçsayfa integer değişken.

Kod: Tümünü seç

kacsayfa:=excel.Workbooks[1].Sheets.Count;
3) Diyelim ki veritabanındaki bilgi excelde 4 sayfaya sığacak kadar. Ozaman 4 tane excel sayfası oluştur.


//Yeni sayfa ekle ve isim ver

Kod: Tümünü seç

excel.Sheets.Add;
Excel.ActiveSheet.Name :='Yeni Sayfa';
4) Exceldeki sayfanı seç ve exceldeki satır sayısı kadar döngü oluşturarak bilgilerini yapıştır.

//Excel içindeki başka bir sayfayı seçmek için

Kod: Tümünü seç

 excel.Sheets['Sayfa2'].Select;
// Sayfa ismi değiştir

Kod: Tümünü seç

  ExcelApp.Workbooks[1].WorkSheets[1].Name := 'Yeni isim';
diseqc
Üye
Mesajlar: 48
Kayıt: 21 May 2009 04:03

Re: cxgrid excele sayfa sayfa export nasıl yapılır.

Mesaj gönderen diseqc »

öncelikle cevabın için teşekkür ederim denedim ama excel. hangi kütüphanenin için excel yazınca bulunamadı diyor bu kodları nasıl kullanacağım biraz daha acarsan sevinirim ayrıca exceli delphide actık sayfa 2 yi aktif hale getirdim bu aşamadan sonra ExportGrid4ToExcel kodunu kulandığımda o sayafaya mı export eder yoksa ayrı bir exel dosyasımı oluşturur yani sayfalara export etmek için seçili sayfadan sonra hani export procedurunu kullanacağım.
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: cxgrid excele sayfa sayfa export nasıl yapılır.

Mesaj gönderen Lord_Ares »

1) ilk olarak uses kısmına comobj satırını ekle.
2) excel:variant tipinde bir değişken tanımla
3) excel:=CreateOleObject('excel.application'); diyerek exceli oluştur.
sonrasında verdiğim örnek kodları kullanarak yapabilirsin.
ekte sana küçük bir örnek hazırladım inceleyerek daha rahat anlayabilirsin.
Dosya ekleri
datadan excele.rar
(8.98 KiB) 169 kere indirildi
diseqc
Üye
Mesajlar: 48
Kayıt: 21 May 2009 04:03

Re: cxgrid excele sayfa sayfa export nasıl yapılır.

Mesaj gönderen diseqc »

abim büyüksün deneyip neticeyi yazacağım emeğine sağlık teşekkür ederim.
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: cxgrid excele sayfa sayfa export nasıl yapılır.

Mesaj gönderen Lord_Ares »

inşallah istediğin gibi olur. :)) takıldığın yer olursa yardımcı olurum
diseqc
Üye
Mesajlar: 48
Kayıt: 21 May 2009 04:03

Re: cxgrid excele sayfa sayfa export nasıl yapılır.

Mesaj gönderen diseqc »

merhaba;

Bu şekilde export etmeyi denedim ama bir çok sorunla karşılaştım mesala burdaki kodlar ile yeni sayfa oluşturmadım ExcelApplication1 kullanarak yapmayı denedim ondada oluşturduğum belgeyi açmadan export edeyim dedim olmadı actıktan sonra kapataym dedim acık olan tüm excel çalışmalarını kaydetmeden kapatıyor vs bir çok sıkıntı hadi onları aştım desem font ayarla hücre genişliği hücre tipi vs. bir sürü kod lazım benim kullandığım ExportGrid4ToExcel komponenti bunları tek seferde uğraşmadan yapıyor şimdi sormak istediğim acaba ben ayrı ayrı ExportGrid4ToExcel ile export etsem sonra bu belgeleri ayrı sayfalarda olacak şekilde tekbir excel belgesinde birleştirebilirmiyim??
diseqc
Üye
Mesajlar: 48
Kayıt: 21 May 2009 04:03

Re: cxgrid excele sayfa sayfa export nasıl yapılır.

Mesaj gönderen diseqc »

Merhaba;

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.



Cevapla