DBGrid e Excel e aktarım !!!

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

DBGrid e Excel e aktarım !!!

Mesaj gönderen ozcank »

Arkadaşlar DBGrid1 deki kayıtları WExcel e nasıl atabilirim?
Kullanıcı avatarı
ahmethakan
Üye
Mesajlar: 30
Kayıt: 03 Eki 2005 05:26
Konum: istanbul

Dbgriden Excelle veri transferi

Mesaj gönderen ahmethakan »

Aşağıdaki kod sorunsuz çalışmaktadır...
ADOOgrNufBil <---- yerine kendi AdoDatset ini yaz

Kod: Tümünü seç


procedure TForm1.BitBtn6Click(Sender: TObject);
var
aralik:ExcelRange;
i,satir:integer;
Bookmark:TbookmarkStr;
begin
   //excel uygulamsı oluştur.
        ExcelApplication1.Visible[0]:=true;
        ExcelApplication1.Workbooks.Add(Null,0);
   //hüçreleri doldur
        aralik:=ExcelApplication1.ActiveCell;
        for i:= 0 to dm.ADOOgrNufBil.Fields.Count -1 do
        begin
                aralik.Value2:=dm.ADOOgrNufBil.Fields[i].DisplayLabel;
                aralik:=aralik.Next;
                end;
   //alanları satırlara ekle
           try
           Bookmark:=dm.ADOOgrNufBil.Bookmark;
           try
                dm.ADOOgrNufBil.First;
                satir:=2; //2. satırdan itibaren
                while not dm.ADOOgrNufBil.Eof do begin
                aralik:=ExcelApplication1.Range['A'+IntToStr(satir),'A'+IntToStr(satir)];
                for i:=0 to dm.ADOOgrNufBil.Fields.Count-1 do
                begin
                aralik.Value2:=dm.ADOOgrNufBil.Fields[i].AsString;
                aralik:=aralik.Next;
                end;
           dm.ADOOgrNufBil.Next;
           Inc (satir);
           Refresh;
           end;
                Finally
                dm.ADOOgrNufBil.Bookmark:=Bookmark;
                end;
                finally
               begin
            // if not VarIsEmpty(Excel)then excel.quit;
               end;
    end;
end;
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

ADOOgrNufBil <---- yerine kendi AdoDatset ini yaz
Table1 veya Query yazabilirmiyim?
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

Bu şekilde yaptım ama ilk satırda hata verdi?

Kod: Tümünü seç

[Error] excel.pas(67): Undeclared identifier: 'ExcelRange'
[Error] excel.pas(72): Undeclared identifier: 'ExcelApplication1'
[Error] excel.pas(72): Missing operator or semicolon

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject);
var
aralik:ExcelRange;
i,satir:integer;
Bookmark:TbookmarkStr;
begin
   //excel uygulamsı oluştur.
        ExcelApplication1.Visible[0]:=true;
        ExcelApplication1.Workbooks.Add(Null,0);
   //hüçreleri doldur
        aralik:=ExcelApplication1.ActiveCell;
        for i:= 0 to dm.Query1.Fields.Count -1 do
        begin
                aralik.Value2:=dm.Query1.Fields[i].DisplayLabel;
                aralik:=aralik.Next;
                end;
   //alanları satırlara ekle
           try
           Bookmark:=dm.Querey1.Bookmark;
           try
                dm.ADOOgrNufBil.First;
                satir:=2; //2. satırdan itibaren
                while not dm.Query1.Eof do begin
                aralik:=ExcelApplication1.Range['A'+IntToStr(satir),'A'+IntToStr(satir)];
                for i:=0 to dm.Query1.Fields.Count-1 do
                begin
                aralik.Value2:=dm.Query1.Fields[i].AsString;
                aralik:=aralik.Next;
                end;
           dm.Query1.Next;
           Inc (satir);
           Refresh;
           end;
                Finally
                dm.Query1.Bookmark:=Bookmark;
                end;
                finally
               begin
            // if not VarIsEmpty(Excel)then excel.quit;
               end;
    end;
end;

Kullanıcı avatarı
ahmethakan
Üye
Mesajlar: 30
Kayıt: 03 Eki 2005 05:26
Konum: istanbul

Mesaj gönderen ahmethakan »

delphi projene 1 adet server sekmesinden
ExcelApplication1 sürükle b ondan sonra derle
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

procedure TForm1.Button2Click(Sender: TObject);
var
aralik:ExcelRange; // bu satırdan geçmiyor.
i,satir:integer;
Bookmark:TbookmarkStr;
begin


burda hata veriyor

[Error] excel.pas(69): Undeclared identifier: 'ExcelRange'
[Error] excel.pas(77): Undeclared identifier: 'aralik'
[Error] excel.pas(78): Undeclared identifier: 'dm'
Kullanıcı avatarı
ahmethakan
Üye
Mesajlar: 30
Kayıt: 03 Eki 2005 05:26
Konum: istanbul

Mesaj gönderen ahmethakan »

Uses 'e Excel2000 i ekle
aşağıdaki kodu şimdi test ettim sorunyok...
bir de demin senin gönderdiğin kodun
21. ci satırı hatalı

Kod: Tümünü seç


var
  aralik:ExcelRange;
  i,satir:integer;
  Bookmark:TbookmarkStr;
begin
   //excel uygulamsı oluştur.
        ExcelApplication1.Visible[0]:=true;
        ExcelApplication1.Workbooks.Add(Null,0);
   //hüçreleri doldur
        aralik:=ExcelApplication1.ActiveCell;
        for i:= 0 to dm.ADODataSet1.Fields.Count -1 do
        begin
                aralik.Value2:=dm.ADODataSet1.Fields[i].DisplayLabel;
                aralik:=aralik.Next;
                end;
   //alanları satırlara ekle
           try
           Bookmark:=dm.ADODataSet1.Bookmark;
           try
                dm.ADODataSet13.First;
                satir:=2; //2. satırdan itibaren
                while not dm.ADODataSet1.Eof do begin
                aralik:=ExcelApplication1.Range['A'+IntToStr(satir),'A'+IntToStr(satir)];
                for i:=0 to dm.ADODataSet1.Fields.Count-1 do
                begin
                aralik.Value2:=dm.ADODataSet1.Fields[i].AsString;
                aralik:=aralik.Next;
                end;
           dm.ADODataSet1.Next;
           Inc (satir);
           Refresh;
           end;
                Finally
                dm.ADODataSet1.Bookmark:=Bookmark;
                end;
                finally
               begin
 //           if not VarIsEmpty(Excel)then excel.quit;
               end;
        end;
end;
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

Dediklerinizi yaptım burayı geçmiyor?

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  aralik:ExcelRange; // burda takılıyor
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

hata bu;

[Error] Unit1.pas(32): Undeclared identifier: 'ExcelRange'
Kullanıcı avatarı
ahmethakan
Üye
Mesajlar: 30
Kayıt: 03 Eki 2005 05:26
Konum: istanbul

Mesaj gönderen ahmethakan »

aşağıdaki uses lere bi bak hangisi eksikse yaz dene

Kod: Tümünü seç

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, XPMan, Menus, OleServer, ExcelXP, ExtCtrls, Grids, DBGrids,
  StdCtrls, Buttons, DBCtrls, ADODB;
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, Menus, OleServer, ExtCtrls, Grids, DBGrids,
StdCtrls, Buttons, DBCtrls, ADODB, Excel2000, DBTables;

ekledim yine aynı yerde takılıyor acaba delphi6 olduğu için mi, ben bunu delphi5 de kullanacam şu an delphi6 da deniyorum.
Kullanıcı avatarı
ahmethakan
Üye
Mesajlar: 30
Kayıt: 03 Eki 2005 05:26
Konum: istanbul

Mesaj gönderen ahmethakan »

vermiş olduğum örnekler Delphi 7 de office sürümüde officexp
uses OleServer, ExcelXP, DB, ADODB

bunları dene

senin için dene program yaptım sorun suz çalıyor tüm kodu yolluyorum
birincele Umarım faydası olur


----------------------------------------------------------------------------------

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, StdCtrls, OleServer, ExcelXP, DB, ADODB;

type
TForm1 = class(TForm)
ADODataSet1: TADODataSet;
ADODataSet1AId: TAutoIncField;
ADODataSet1BILGI: TIntegerField;
ADODataSet1KURSMERKEZI: TWideStringField;
ADODataSet1USTAOGRETICI: TWideStringField;
ADODataSet1BRANS: TWideStringField;
ADODataSet1GUNLER: TWideStringField;
ADODataSet1DERSGUNLERI: TWideStringField;
ADODataSet1HIOK: TWideStringField;
ADODataSet1HIKK: TWideStringField;
ADODataSet1HSOK: TWideStringField;
ADODataSet1HSKK: TWideStringField;
ADODataSet1AKSOK: TWideStringField;
ADODataSet1AKSKK: TWideStringField;
ADODataSet1TONKAYIT: TWideStringField;
ADODataSet1TKESINKAYIT: TWideStringField;
ADODataSet1HSAKSOK: TWideStringField;
ADODataSet1HSAKSKK: TWideStringField;
DataSource1: TDataSource;
ADOConnection1: TADOConnection;
ExcelApplication1: TExcelApplication;
Button1: TButton;
DBGrid1: TDBGrid;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
aralik:ExcelRange;
i,satir:integer;
Bookmark:TbookmarkStr;
begin
//excel uygulamsı oluştur.
ExcelApplication1.Visible[0]:=true;
ExcelApplication1.Workbooks.Add(Null,0);
//hüçreleri doldur
aralik:=ExcelApplication1.ActiveCell;
for i:= 0 to ADODataSet1.Fields.Count -1 do
begin
aralik.Value2:=ADODataSet1.Fields.DisplayLabel;
aralik:=aralik.Next;
end;
//alanları satırlara ekle
try
Bookmark:=ADODataSet1.Bookmark;
try
ADODataSet1.First;
satir:=2; //2. satırdan itibaren
while not ADODataSet1.Eof do begin
aralik:=ExcelApplication1.Range['A'+IntToStr(satir),'A'+IntToStr(satir)];
for i:=0 to ADODataSet1.Fields.Count-1 do
begin
aralik.Value2:=ADODataSet1.Fields.AsString;
aralik:=aralik.Next;
end;
ADODataSet1.Next;
Inc (satir);
Refresh;
end;
Finally
ADODataSet1.Bookmark:=Bookmark;
end;
finally
begin
// if not VarIsEmpty(Excel)then excel.quit;
end;
end;

end;

end.


ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

Benim böyle bir uygulamam vardı fakat excel açmıyordu onun için arayış içine girdim birde başlık ekletmeliyim yardım edermisiniz?

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  i : integer;
begin
  v:=createoleobject('excel.application'); //exceli yarat
  v.workbooks.open('c:\a\Kitap1.xls');  //yeni calisma kitabini ekle
  sayfa:=v.workbooks[1].worksheets[1]; // 2. worksheets için de aynı

  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add('select * from SISTEMFOR');
  Query1.Open;

  Query1.First;

  for i := 1 to query1.RecordCount do
  begin
      sayfa.cells[(i+2),1] := query1.Fields[1].AsFloat;
      sayfa.cells[(i+2),2] := query1.Fields[2].AsString;
      sayfa.cells[(i+2),3] := query1.Fields[3].AsString;
      sayfa.cells[(i+2),4] := query1.Fields[4].AsString;
      sayfa.cells[(i+2),5] := query1.Fields[5].AsString;

//      sayfa.cells[(i+8),4] := table1.fieldsbyname(toplam).asfloat; şeklindede olabilir.

  query1.Next;
  end; //   for i := 1 to query1.RecordCount do
  v.quit;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
aralik:ExcelRange;
i,satir:integer;
Bookmark:TbookmarkStr;
begin
   //excel uygulamsı oluştur.
        ExcelApplication1.Visible[0]:=true;
        ExcelApplication1.Workbooks.Add(Null,0);
   //hüçreleri doldur
        aralik:=ExcelApplication1.ActiveCell;
        for i:= 0 to dm.Query1.Fields.Count -1 do
        begin
                aralik.Value2:=dm.Query1.Fields[i].DisplayLabel;
                aralik:=aralik.Next;
                end;
   //alanları satırlara ekle
           try
           Bookmark:=dm.Querey1.Bookmark;
           try
                dm.Query1.First;
                satir:=2; //2. satırdan itibaren
                while not dm.Query1.Eof do begin
                aralik:=ExcelApplication1.Range['A'+IntToStr(satir),'A'+IntToStr(satir)];
                for i:=0 to dm.Query1.Fields.Count-1 do
                begin
                aralik.Value2:=dm.Query1.Fields[i].AsString;
                aralik:=aralik.Next;
                end;
           dm.Query1.Next;
           Inc (satir);
           Refresh;
           end;
                Finally
                dm.Query1.Bookmark:=Bookmark;
                end;
                finally
               begin
            // if not VarIsEmpty(Excel)then excel.quit;
               end;
    end;
end;
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  v,sayfa:variant;{v excel prg, sayfa calisma sayfasi}
  say,i:integer;
begin
  query1.open;
  say:=query1.recordcount;//query kayit sayisi
  v:=createoleobject('excel.application');//exceli yarat
  v.workbooks.add;//yeni calisma kitabini ekle
  sayfa:=v.workbooks[1].worksheets[1];{Birinci calisma sayfasini sayfa degiskenine ata}
  query1.first;
  for i:=1 to say do
    begin
    sayfa.cells[i,1]:=query1ad.text; 
    sayfa.cells[i,2]:=query1soyad.text;
    query1.next;
    end;
v.visible:=true;//Exceli acip verileri goster
end;
Kısaca şöle diyebiliriz.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

Vedat abi başlık da ekleyebilirmiyiz, alan başlıklarını?
Cevapla