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

Re: DBGrid den Excell e veri gönderme

Mesaj gönderen ozcank »

Bu şekilde yaptım çalışmadı

Sheet.Cells[Row, 6].Formula := DBGrid1.Fields + InttoStr(Row - 1);
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 tarihi yazdırabildim ama bir satırı ve dip kısımda yazdı ;

Kod: Tümünü seç

       for i := 0 to DBGrid1.FieldCount - 1 do
       if i <> 2 then
       begin
         Inc(Col);
         Sheet.Cells[Row, Col].Value := DBGrid1.Fields[i].Value;
         if Col > 2 then
           Sheet.Cells[Row, Col].NumberFormat := '0_ ;-0';
       end;
       Next;
       Inc(Row);
     end;
Sheet.cells[Row,6]:= DBGrid1.Fields[6].Asstring; // Bu satır 
 end;
      finally
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: DBGrid den Excell e veri gönderme

Mesaj gönderen xxxjedixxx »

Özcan bey, bu yaptıklarımızın hiç birinin Delphi ile alakası olmadığını belirteyim. Mevzu, sadece Excel'de hücre formatı sorunudur.

Döngü içindeki if şartını şöyle yazın.
Yani
if Col > 2 then
Sheet.Cells[Row, Col].NumberFormat := '0_ ;-0';
satırının yerine yazacaksınız.

Kod: Tümünü seç

  ...
         if (i = 3)  then // burası sayılar için. Başka sayı varsa " or (i = 5) " gibi ekleyebilirsiniz. Burada i Grid'in sütun nosunu temsil ediyor
           Sheet.Cells[Row, Col].NumberFormat := '0_ ;-0'; // sen bu şekilde yazmışsın bunun yerine '#,###.##' formatı kullanabilirsin (sorun olursa nokta virgül yerini değiştir)
        if (i = 6) then //tarih olan sütunlar için
           Sheet.Cells[Row, Col].NumberFormat := 'dd.mm.yyy'; // olmazsa 'gg.aa.yyy' yaz
  ...
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: DBGrid den Excell e veri gönderme

Mesaj gönderen ozcank »

Çok teşekkür ederim kodu şu şekilde değiştirdim istediğim gibi oldu ;

Kod: Tümünü seç

 begin
     Row := 9; // başlangıç 9. satır
     First;
     While not Eof do
     begin
     Col := 0;
       for i := 0 to DBGrid1.FieldCount - 1 do
       if i <> 2 then
       begin
         Inc(Col);
         Sheet.Cells[Row, Col].Value := DBGrid1.Fields[i].Value;
       if Col >= 2 then
           Sheet.Cells[Row,Col].NumberFormat := '0_ ;-0';
        if (Col = 6) or (Col = 6) then
           Sheet.Cells[Row, Col].NumberFormat := 'gg.aa.yyyy';
       end;
       Next;
       Inc(Row);
     end;
 end;
      finally
 




xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: DBGrid den Excell e veri gönderme

Mesaj gönderen xxxjedixxx »

Özcan bey yine ezbere ve yanlış yolda ilerliyorsunuz.
if Col >= 2 then
Sheet.Cells[Row,Col].NumberFormat := '0_ ;-0';
if (Col = 6) or (Col = 6) then // Allah aşkına bu nedemek ?

if Col >= 2 dediğinizde durum 6 içinde geçerli. 6 da 2 den büyüktür. Örn: 6 için önce formatı '0_ ;-0' yapıp sonra bir alt satıda tarihe çeviriyorsunuz.

Siz benim yaptığım gibi yapın inanın doğrusu o. Siz mantık yürütmeden yapıyorsunuz. Böyle programcı olunmaz.
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 düzelttim;

Kod: Tümünü seç

     Row := 9; // başlangıç 9. satır
     First;
     While not Eof do
     begin
     Col := 0;
       for i := 0 to DBGrid1.FieldCount - 1 do
       if i <> 2 then
       begin
         Inc(Col);
         Sheet.Cells[Row, Col].Value := DBGrid1.Fields[i].Value;
       if Col >= 2 then
//           Sheet.Cells[Row,Col].NumberFormat := '0_ ;-0';
           Sheet.Cells[Row,Col].NumberFormat := '#';
       if (Col = 6) then
           Sheet.Cells[Row, Col].NumberFormat := 'gg.aa.yyyy';
       end;
       Next;
       Inc(Row);
     end;
 end;
      finally
    Sheet.Columns['A:G'].EntireColumn.AutoFit;
    ExcelApp.Visible := True;
    ExcelApp := Null; WBook := Null; Sheet := Null;
  end;
end;
end;
Cevapla