DBGrid den Excell e veri gönderme

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

DBGrid den Excell e veri gönderme

Mesaj gönderen ozcank »

Arkadaşlar;
Aşağıdaki kodun döngüsünde bir hata var tek satır yazıp excell e atıyor yardım edebilir misiniz?

Kod: Tümünü seç

  end;
//  try
  with ERehber do
//  while Not ERehber.eof do
  begin
     I:=I+1;
     D:=D+1;
Sheet.cells[9+D,I]   := DBGrid1.Columns.Grid.Fields[0].Text;
Sheet.cells[9+D,I+1] := DBGrid1.Columns.Grid.Fields[1].Text;
Sheet.cells[9+D,I+2] := DBGrid1.Columns.Grid.Fields[3].Text;
Sheet.cells[9+D,I+3] := DBGrid1.Columns.Grid.Fields[4].Text;
Sheet.cells[9+D,I+4] := DBGrid1.Columns.Grid.Fields[5].Text;
Sheet.cells[9+D,I+5] := DBGrid1.Columns.Grid.Fields[6].Text;
Sheet.cells[9+D,I+6] := DBGrid1.Columns.Grid.Fields[7].Text;
    ERehber.Next;
     I:=0;
// finally
    Sheet.Columns['A:G'].EntireColumn.AutoFit;
    ExcelApp.Visible := True;
    ExcelApp := Null; WBook := Null; Sheet := Null;
  end;
END;
end;



tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: DBGrid den Excell e veri gönderme

Mesaj gönderen tayipk »

merhaba

Kod: Tümünü seç

Sheet.cells[9+D,I]   := DBGrid1.Columns.Grid.Fields[0].Text;
yerine dbgridin bağlı olduğu datasetten veri çekseniz daha mantıklı değil mi sizcede örn:

Kod: Tümünü seç

Sheet.cells[9+D,I]   := adoquery1.fieldbyname('Alan_adi').Asstring;
şeklinde daha sağlıklı bir aktarım diye düşünüyorum.
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: DBGrid den Excell e veri gönderme

Mesaj gönderen ozcank »

evet fakat ben AdoQuery1 alan adı vermedim FieldByName yani o yüzden dbgrid den çekiyorum ama döngüde var sanırım excell 1 satır atıp diğer kayıtları getirmiyor
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: DBGrid den Excell e veri gönderme

Mesaj gönderen tayipk »

ozcank yazdı:Arkadaşlar;
Aşağıdaki kodun döngüsünde bir hata var tek satır yazıp excell e atıyor yardım edebilir misiniz?

Kod: Tümünü seç

  end;
//  try
  with ERehber do
//  while Not ERehber.eof do
  begin
     I:=I+1;
     D:=D+1;
Sheet.cells[9+D,I]   := DBGrid1.Columns.Grid.Fields[0].Text;
Sheet.cells[9+D,I+1] := DBGrid1.Columns.Grid.Fields[1].Text;
Sheet.cells[9+D,I+2] := DBGrid1.Columns.Grid.Fields[3].Text;
Sheet.cells[9+D,I+3] := DBGrid1.Columns.Grid.Fields[4].Text;
Sheet.cells[9+D,I+4] := DBGrid1.Columns.Grid.Fields[5].Text;
Sheet.cells[9+D,I+5] := DBGrid1.Columns.Grid.Fields[6].Text;
Sheet.cells[9+D,I+6] := DBGrid1.Columns.Grid.Fields[7].Text;
    ERehber.Next;
     I:=0;
// finally
    Sheet.Columns['A:G'].EntireColumn.AutoFit;
    ExcelApp.Visible := True;
    ExcelApp := Null; WBook := Null; Sheet := Null;
  end;
END;
end;



Benimde aslında anlatmaya çalıştığım tam bu nkta idi bak şimdi

Kod: Tümünü seç

  with ERehber do
//  while Not ERehber.eof do
  begin
bu kodla sen Erehber datasetinin sonuna kadar git diyorsun sonra

Kod: Tümünü seç

   I:=I+1;
     D:=D+1;
Sheet.cells[9+D,I]   := DBGrid1.Columns.Grid.Fields[0].Text;
Sheet.cells[9+D,I+1] := DBGrid1.Columns.Grid.Fields[1].Text;
...
...
...
...
 ERehber.Next;
bu kodda ise sadece Erehber datasetini Next yapıyorsun. yani şunu yapıyorsun Erehber datasetin bitene kadar sen Dbgriddeki ilk satırı almaya çalışıyorsun. bence kodlarını ve mantığı tekrar gözden geçir derim. dbgridin datasetini Erehber yap ki Next ten sonra ki kayıt aktarılabilsin.Birde dataseti bağlarsan ERehber.Next demene gerek yok çünkü işlem bittikten sonra döngü otomatik olarak bir sonraki kayda kendisi geçer. Kolay gelsin.
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: DBGrid den Excell e veri gönderme

Mesaj gönderen ozcank »

Aslında döngü bu şekildeydi ve başka yerlerde kullandım düzgün çalışıyor sadece 1 alanı yazdırmak istemiyorum onu yapamadım kodda değişiklik yaparak yardım eder misin?

Kod: Tümünü seç

  end;
  try
  with ERapor do
  begin
     Row := 9; 
     First;
     While not Eof do
     begin
       for Col := 0 to DBGrid1.FieldCount - 1 do
       begin
         Sheet.Cells[Row, Col + 1].Value := DBGrid1.Fields[Col].Value;
         if Col + 1 >= 3 then
           Sheet.Cells[Row, Col + 1].NumberFormat := '0_ ;-0';
       end;
       Next;
       Inc(Row); // Row := Row + 1;
     end;
  end;
  finally
    Sheet.Columns['A:F'].EntireColumn.AutoFit;
    ExcelApp.Visible := True;
    ExcelApp := Null; WBook := Null; Sheet := Null;
  end;
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: DBGrid den Excell e veri gönderme

Mesaj gönderen xxxjedixxx »

Kodu şu şekilde düzeltin, istediğiniz olacaktır. Sizdeki "for" bloğununun yerine aşağıdaki bloğu yazın.

Kod: Tümünü seç

var i: integer; // bunu da tanımlamayı unutmayın

Kod: Tümünü seç

       ...
       Col := 0;
       for i := 0 to DBGrid1.FieldCount - 1 do
       if i <> 3 then // Buradaki 3'ün anlamı yazdırılmayacak olan sütun nosu, 
                       // 0'dan başlayarak DBGrid'teki sütün numarası, yani görünüşte 4. sütun oluyor. 
       begin
         Inc(Col); 
         Sheet.Cells[Row, Col].Value := DBGrid1.Fields[i].Value;
         if Col >= 3 then
           Sheet.Cells[Row, Col].NumberFormat := '0_ ;-0';
       end;
       ...
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: DBGrid den Excell e veri gönderme

Mesaj gönderen ozcank »

Bu şekilde ekledim ama bu sefer hiç aktarmadı

Kod: Tümünü seç

   except
    ShowMessage('Excel başlatılamıyor.'); Exit;
    end;
  try
  with ERehber do
  begin
     Row := 3; // başlangıç 3. satır
     First;
     While not Eof do
     begin
     Col := 0;
       for i := 0 to DBGrid1.FieldCount - 1 do
       if i <> 3 then // Buradaki 3'ün anlamı yazdırılmayacak olan sütun nosu,
                       // 0'dan başlayarak DBGrid'teki sütün numarası, yani görünüşte 4. sütun oluyor.
       begin
         Inc(Col);
         Sheet.Cells[Row, Col].Value := DBGrid1.Fields[i].Value;
         if Col >= 3 then
           Sheet.Cells[Row, Col].NumberFormat := '0_ ;-0';
       end;
       end;
       Next;
       Inc(Row); // Row := Row + 1;
     end;
  finally
    Sheet.Columns['A:F'].EntireColumn.AutoFit;
    ExcelApp.Visible := True;
    ExcelApp := Null; WBook := Null; Sheet := Null;
  end;
end;
End;



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

Re: DBGrid den Excell e veri gönderme

Mesaj gönderen ozcank »

birsüre bekledikten sonra "uzak işlem süresi başarısız" diyor
bu satırda;
Sheet.Cells[Row, Col].NumberFormat := '0_ ;-0';
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: DBGrid den Excell e veri gönderme

Mesaj gönderen ozcank »

Tamam "End;" leri düzelttim oldu tarih yerinde sıkıntı var 41285 yazıyor
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: DBGrid den Excell e veri gönderme

Mesaj gönderen xxxjedixxx »

Lütfen kodu düzgün yapıştırn.

for......
begin
.......
end;

bunun yerine benim verdiğimi yapıştırın, ne eksik ne fazla.

Fazladan end eklediğinizi görüyorum. Next'in üstündeki end nedir?
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: DBGrid den Excell e veri gönderme

Mesaj gönderen xxxjedixxx »

ozcank yazdı:Tamam "End;" leri düzelttim oldu tarih yerinde sıkıntı var 41285 yazıyor
if Col >= 3 then

ifadesindeki eşitliği kaldırıp deneyin. Yazılan kodu anlamaya çalışın lütfen.

if Col > 3
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: DBGrid den Excell e veri gönderme

Mesaj gönderen tayipk »

ozcank yazdı:Tamam "End;" leri düzelttim oldu tarih yerinde sıkıntı var 41285 yazıyor
aktarım yapmadan önce tarih alanınızı string e dönüştürüyormusunuz?
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: DBGrid den Excell e veri gönderme

Mesaj gönderen ozcank »

eşiti kaldırdım sonuç değişmedi .
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: DBGrid den Excell e veri gönderme

Mesaj gönderen ozcank »

Excell de makro çalıştırarak mı string alanı değiştirmeliyim
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: DBGrid den Excell e veri gönderme

Mesaj gönderen tayipk »

ozcank yazdı:Excell de makro çalıştırarak mı string alanı değiştirmeliyim
hayır sizin dbgridde eğer o alan datetime ise bunu önce stringe çevirip o şekilde excele aktarım yapmayı denermisiniz
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
Cevapla