Dbgrid deki veri excel e aktarma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Dbgrid deki veri excel e aktarma

Mesaj gönderen conari »

Merhaba Aşagıda ki kodu kullanaarak griddeki veriyi excele almak istiyorum.Kodu delphipage sitesinden aldım.
Fakat Rowcount olayına v.s şarlıyo meret.bulamadığı için .Nasıl bir yöntem kullanmam lazım..

Sağolun..
:roll: :roll: :idea:

Kod: Tümünü seç

procedure TSform.ExceleGonderClick(Sender: TObject);
var
 xls, wb, Range: OLEVariant;
 arrData: Variant;
begin
 {create variant array where we'll copy our data}
 arrData := VarArrayCreate([1, ALLsipDBGrid.RowCount, 1,
ALLsipDBGrid.ColCount], varVariant);

 {fill array}
 for i := 1 to ALLsipDBGrid.RowCount do
   for j := 1 to ALLsipDBGrid.ColCount do
     arrData[i, j] := ALLsipDBGrid.Cells[j-1, i-1];

 {initialize an instance of Excel}
 xls := CreateOLEObject('Excel.Application');

 {create workbook}
 wb := xls.Workbooks.Add;

 {retrieve a range where data must be placed}
 Range := wb.WorkSheets[1].Range[wb.WorkSheets[1].Cells[1, 1],
wb.WorkSheets[1].Cells[ALLsipDBGrid.RowCount, ALLsipDBGrid.ColCount]];

 {copy data from allocated variant array}
 Range.Value := arrData;

 {show Excel with our data}
 xls.Visible := True;
end;
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
sitede excelle veri gönderme ile ilgili bi dünya yazı var
onları incelemeni tavsiye ederim.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Çok inceledim dostum çok... bilemezsin bir saat ayırdım bunun için siteye..
Kullanıcı avatarı
Biltes
Üye
Mesajlar: 361
Kayıt: 11 Oca 2005 02:24
Konum: Edirne

Mesaj gönderen Biltes »

Hocam aslangeri hocamında dediği gibi sitede aslında bir sürü link var bununla ilgili ama detaylı arama yapamadınız sanırım. Yinede aktarım yapabileceğin kodu ben sana aşağıya yazıyorum bu şekilde kullanabilirsin...

Kod: Tümünü seç

Forma ExcelApplication1 nesnesi koyarsın
Uses kısmına (En üsteki), OleServer,Excel97 yazmayı unutma

procedure TForm1.Button1Click(Sender: TObject);
var IRange  : Excel97.Range;
    i,Row : integer;
begin
   if not ExcelApplication1.Visible[0]  then //excel açıkmı

    begin
     excelApplication1.Visible[0]:= True;//açık değilse aç
     excelApplication1.Workbooks.Add(NULL,0);//yeni çalışma litabı oluştur
    end
   else //excel açıksa  yeni çalışma sayfası ekle     
        excelApplication1.Sheets.Add(Null,null,null,null,1);


    // Alan Başlıkları
    IRange := excelApplication1.ActiveCell;
    for i := 0 to Table1.Fields.count-1 do
    begin
        IRange.Value := Table1.Fields[i].DisplayLabel;
        IRange := IRange.Next;
    end;

     // Kayıt Alanları
    Table1.DisableControls;
  try
      Table1.First;
      Row :=2;
      while Not Table1.Eof do
      begin
          IRange := ExcelApplication1.Range['A'+IntToStr(Row),'A'+IntToStr(Row)];
          for i := 0 to Table1.Fields.Count-1 do
          begin
              IRange.Value := Table1.Fields[i].Value;
              IRange := IRange.Next;
          end;
          Table1.Next;
          Inc(Row);
      end;

  finally

      Table1.EnableControls;
  end;
   // Auto format
   IRange:= ExcelApplication1.Range['A1','D'+IntToStr(Row-1)];
   IRange.AutoFormat(6,Null,Null,Null,Null,Null,Null);
end;
Kolay gelsin...
Var olmaya değer her şey bilinmeye de değerdir. Çünkü bilgi varlığın bir imgesidir. Onda iyi ve kötü aynı anda bulunmaktadır...
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Teşşekkür ,yalnız çalışmadı dedginiz gibi uses a ekleme yaptım.
excel.app zaten vardı formumda..
oleserver için aşağıdaki hatayı verdi.

[Error] Siparis.pas(125): Identifier redeclared: 'OleServer'

range için
[Error] Siparis.pas(399): Undeclared identifier: 'Range'
ve i :) için

[Error] Siparis.pas(400): Invalid compiler directive: 'i'

Kod: Tümünü seç

procedure TSform.ExceleGonderClick(Sender: TObject);
var IRange  : Excel97.Range;
    i,Row : integer;
begin
   if not ExcelApplication1.Visible[0]  then //excel açıkmı 

    begin 
     excelApplication1.Visible[0]:= True;//açık değilse aç
     excelApplication1.Workbooks.Add(NULL,0);//yeni çalışma litabı oluştur
    end
   else //excel açıksa  yeni çalışma sayfası ekle
        excelApplication1.Sheets.Add(Null,null,null,null,1);


    // Alan Başlıkları 
    IRange := excelApplication1.ActiveCell;
    for i := 0 to ALLsipQuery.Fields.count-1 do
    begin
        IRange.Value := ALLsipQuery.Fields[i].DisplayLabel;
        IRange := IRange.Next;
    end;

     // Kayıt Alanları
    ALLsipQuery.DisableControls;
  try
      ALLsipQuery.First;
      Row :=2;
      while Not ALLsipQuery.Eof do
      begin
          IRange := ExcelApplication1.Range['A'+IntToStr(Row),'A'+IntToStr(Row)];
          for i := 0 to ALLsipQuery.Fields.Count-1 do
          begin
              IRange.Value := ALLsipQuery.Fields[i].Value;
              IRange := IRange.Next;
          end;
          ALLsipQuery.Next;
          Inc(Row);
      end;

  finally

      ALLsipQuery.EnableControls;
  end;
   // Auto format
   IRange:= ExcelApplication1.Range['A1','D'+IntToStr(Row-1)];
   IRange.AutoFormat(6,Null,Null,Null,Null,Null,Null);
end;
Kullanıcı avatarı
Biltes
Üye
Mesajlar: 361
Kayıt: 11 Oca 2005 02:24
Konum: Edirne

Mesaj gönderen Biltes »

Ya da diğer bir yöntem olarak bu kodu kullanabilirsin ;)

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
v,sayfa:variant;
i,d:integer;
r:variant;

  begin
  v:=createoleobject('excel.application');
  v.workbooks.add;
  sayfa:=v.workbooks[1].worksheets[1];
  r:=v.activeworkbook.worksheets[1].cells[1];
  i:=0;
  d:=0;
  while Not Table1.eof do
  begin
     i:=i+1;
     d:=d+1;
     r.cells[1+d,i]:=Table1.FieldByName('NAME').AsString;
     r.cells[1+d,i+1]:=Table1.FieldByName('SIZE').AsString;
     Table1.Next;
     i:=0;
  end;
  v.visible:=true;
end;
Kolay gelsin...
Var olmaya değer her şey bilinmeye de değerdir. Çünkü bilgi varlığın bir imgesidir. Onda iyi ve kötü aynı anda bulunmaktadır...
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

DOSTUM ANLATAMADIM GALİBA uses a yazdığımız oleserver nesnesini şarlıyor.
Kullanıcı avatarı
Biltes
Üye
Mesajlar: 361
Kayıt: 11 Oca 2005 02:24
Konum: Edirne

Mesaj gönderen Biltes »

Dostu OleServer nesnesini aramasını nedeni eğer d7 kullanıyorsan kurulumda office sürümünü soruyor onu effice 97 seçmelisin. Yoksa ondan dolayı hatayı verir. Onun haricinde de başka bir olay aklıma gelmiyor. Ama düşünüyorum aklıma geldiği anda hemen yazıcam...
Var olmaya değer her şey bilinmeye de değerdir. Çünkü bilgi varlığın bir imgesidir. Onda iyi ve kötü aynı anda bulunmaktadır...
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Sağol dediğin gibi d7 kullanıyorum ve kurarken officeXP sectim diye hatırlıyorum..
bunu değiştiremezmiyim acaba.

:roll: :oops:
Kullanıcı avatarı
Biltes
Üye
Mesajlar: 361
Kayıt: 11 Oca 2005 02:24
Konum: Edirne

Mesaj gönderen Biltes »

Yeniden kurulumu başlat ve repair seç bir ihtimal belki oradan yapabilrsin en kötü ihtimalle, yeniden kurman gerekebilir...
Kolay gelsin... :)
Var olmaya değer her şey bilinmeye de değerdir. Çünkü bilgi varlığın bir imgesidir. Onda iyi ve kötü aynı anda bulunmaktadır...
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Dostum Repair edeyim dedim ama maalesef Office sormuyo..
Tekrardan kurmayıda gözüm yemior. o kadar comp. falan Başka bir yol arayacağım.yardımların için saol
Kullanıcı avatarı
Biltes
Üye
Mesajlar: 361
Kayıt: 11 Oca 2005 02:24
Konum: Edirne

Mesaj gönderen Biltes »

Tamam dostum, yine de araştırmaya bende devam ediyorum eğer başka bir yöntem öğrenirsem yine yardımcı olurum. Kolay gelsin... Selametle...
Var olmaya değer her şey bilinmeye de değerdir. Çünkü bilgi varlığın bir imgesidir. Onda iyi ve kötü aynı anda bulunmaktadır...
ikut

Merhaba

Mesaj gönderen ikut »

conari yazdı:Dostum Repair edeyim dedim ama maalesef Office sormuyo..
Tekrardan kurmayıda gözüm yemior. o kadar comp. falan Başka bir yol arayacağım.yardımların için saol
1. Asla kurulumda ekranları okumadan cart cart geçmeyin.
2. Bunu yapmasaydınız orda "ilerde bu seçeneği değiştirebilrsiniz " dediğini görecektiniz.
3. Install packagestan istediğiniz seçeneği işaretleyip onu aktif yapabilrsiniz..

ancak ben bunu tavsiye etmem. neden dersen makinede excel yoksa ne olacak ?
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

tabiki cart cart geçmedim sistemimizde kurulu olan Office 2003 dolayı sı ile de XP seçmek zorundaydım.

Geriye dönüş uninstall install bunun ile ilgili ..
Ama farklı bir comp. v.s. olmsı lazım.Bazıları Fastreport v.s. diyor onu deneyeceğim..

Program genel bir program olmadıgı için yani 3 user özel yazılım.
Excel olmama gibi bir durum da olmayacak.
kolay gelsin..
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Aşagıdaki kod blogu ile çözdüm arkadaşlar.

yalnız uses a comobj yazmayı unutmayalım..

Kod: Tümünü seç

procedure TSform.ExceleGnder1Click(Sender: TObject);
var
  v,sayfa:variant;{v excel prg, sayfa calisma sayfasi}
  say,i:integer;
begin
  AciksipQuery.open;
  say:=AciksipQuery.recordcount;//query kayit sayisi
  v:=createoleobject('excel.application');//exceli oluştur.
  v.workbooks.add;//yeni calisma kitabini ekle
  sayfa:=v.workbooks[1].worksheets[1];{Birinci calisma sayfasini sayfa degiskenine ata}
  AciksipQuery.first;
  for i:=1 to say do
    begin
    sayfa.cells[i,1]:=ACIKsipQueryFISNO.text;
      sayfa.cells[i,2]:=ACIKsipQuerySTHAR_TARIH.text;
        sayfa.cells[i,3]:=ACIKsipQuerySTHAR_TESTAR.text;
            sayfa.cells[i,4]:=ACIKsipQuerySTOK_ADI.text;
                sayfa.cells[i,5]:=ACIKsipQueryEKALAN.text;
                    sayfa.cells[i,6]:=ACIKsipQuerySTHAR_GCMIK.text;
                        sayfa.cells[i,7]:=ACIKsipQuerySTHAR_NF.text;
                            sayfa.cells[i,8]:=ACIKsipQueryToplam_Tutar.text;
                                sayfa.cells[i,9]:=ACIKsipQueryISIM_SOYAD.text;
                                    sayfa.cells[i,10]:=ACIKsipQueryCARI_ISIM.text;
    AciksipQuery.next;
    end;
v.visible:=true;//Exceli acip verileri goster

end;
Cevapla