Excell Aktarma

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

Excell Aktarma

Mesaj gönderen ozcank »

Arkadaşlar şu şekilde bir sorgum var ve düzgün çalışıyor, ne zaman ki bir alan ekleyene kadar Resmi Fatura No alanı ekleyince şu şekilde excel de görünmeye başladı.

Resmi Fatura No
792953.000
böyle olmasını istiyorum ama yapamadım ;

792953000

Yardımcı olur musunuz ?

Kod: Tümünü seç

procedure TForm12.BitBtn2Click(Sender: TObject);
var ExcelApp, WBook, Sheet: OleVariant;
    Row, Col: Integer; // satır ve sütün için değişken
begin
//  if DBGrid1.DataSource.DataSet.IsEmpty then Exit;
  if NRapor1.IsEmpty then Exit; // ikiside aynı şey tmm
  try
    ExcelApp := CreateOleObject('Excel.Application');
    WBook := ExcelApp.WorkBooks.Add;
    Sheet := WBook.WorkSheets[1];
    Sheet.Range['A1', 'K1'].Merge;
    Sheet.Range['A1','K1'].Font.Bold:=True;
    Sheet.Range['A1','K1'].Font.Color:=clRed;
    Sheet.Cells[1,1].Value:='Netsis Ayrıntılı K.D.V. İcman Raporu';
    Sheet.Cells[1,1].HorizontalAlignment := -4108;
    Sheet.Cells[1,1].Font.Size := 20;
    Sheet.Cells[2,1].Value:='Fatura No';
    Sheet.Cells[2,2].Value:='Tarih';
    Sheet.Cells[2,3].Value:='Cari İsim';
    Sheet.Cells[2,4].Value:='Brüt Tutar';
    Sheet.Cells[2,5].Value:='Satır İskontorsu';
    Sheet.Cells[2,6].Value:='Genel İskonto';
    Sheet.Cells[2,7].Value:='% 1 K.D.V.';
    Sheet.Cells[2,8].Value:='% 8 K.D.V.';
    Sheet.Cells[2,9].Value:='% 18 K.D.V.';
    Sheet.Cells[2,10].Value:='Genel Toplam';
    Sheet.Cells[2,11].Value:='Resmi Fatura No';
    Sheet.Range['A2','K2'].Font.Bold:=True;
    Sheet.Range['A2','K2'].Font.Color:=clRed;
   except
    ShowMessage('Excel başlatılamıyor.'); Exit;
  end;
  try
  with NRapor1 do
  begin
     Row := 3; // başlangıç 3. satır
     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 >= 4 then
         Sheet.Cells[Row, Col + 1].NumberFormat := '#.##0,00';
       end;
       Next;
       Inc(Row); // Row := Row + 1;
     end;
     Sheet.Cells[Row, 4].Formula := '=SUM(D3:D' + InttoStr(Row - 1) + ')';
     Sheet.Cells[Row, 5].Formula := '=SUM(E3:E' + InttoStr(Row - 1) + ')';
     Sheet.Cells[Row, 6].Formula := '=SUM(F3:F' + InttoStr(Row - 1) + ')';
     Sheet.Cells[Row, 7].Formula := '=SUM(G3:G' + InttoStr(Row - 1) + ')';
     Sheet.Cells[Row, 8].Formula := '=SUM(H3:H' + InttoStr(Row - 1) + ')';
     Sheet.Cells[Row, 9].Formula := '=SUM(I3:I' + InttoStr(Row - 1) + ')';
     Sheet.Cells[Row,10].Formula := '=SUM(J3:J' + InttoStr(Row - 1) + ')';

     Sheet.Range['A' + InttoStr(Row), 'J' + InttoStr(Row)].Font.Color := 255;
     Sheet.Range['A' + InttoStr(Row), 'J' + InttoStr(Row)].Font.Bold := True;
  end;
  finally
    Sheet.Columns['A:J'].EntireColumn.AutoFit;
    ExcelApp.Visible := True;
    ExcelApp := Null; WBook := Null; Sheet := Null;
  end;
end;

Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Excell Aktarma

Mesaj gönderen Lord_Ares »

Baştan kolunu ekle ardından eklediğin kolonun formatını aşağıdaki gibi değişir. Sonra bilgileri yaz

Kod: Tümünü seç

sheet.Columns[hangi kolonsa onu yaz].NumberFormat := '0,000';
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: Excell Aktarma

Mesaj gönderen ozcank »

sheet.Columns[Row,11].NumberFormat := '000000000000000';


bu şekilde hata verdi?
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: Excell Aktarma

Mesaj gönderen ozcank »

Hallettim Kardeşim çok teşekkür ederim. Şu şekilde yaptım;

sheet.Columns['K'].NumberFormat := '000000000000000';
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: Excell Aktarma

Mesaj gönderen ozcank »

Kardeşim bir şey daha sormak istiyorum ;
Genel toplam : 3490.19
Böyle yapmak istiyorum : 3.490,19

Kod kısmı

Sheet.Cells[Row, Col + 1].Value := DBGrid1.Fields[Col].Value;
if Col + 1 >= 4 then
Sheet.Cells[Row, Col + 1].NumberFormat := '#.##0,00';
end;
Next;
Inc(Row); // Row := Row + 1;
end;
Sheet.Cells[Row, 4].Formula := '=SUM(D3:D' + InttoStr(Row - 1) + ')';
Sheet.Cells[Row, 5].Formula := '=SUM(E3:E' + InttoStr(Row - 1) + ')';

Nasıl değiştirebilirim bu alanları?
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Excell Aktarma

Mesaj gönderen Lord_Ares »

Bu sefer colums yerine range kullandık. Dilersen cell de kullanabilirsin. aşağıdakini kendine göre düzenleyip denermisin. Nokta ve virgul ayracının nerede olacağını '##.##0 veya #.### ' gibi deneyerek sonuçları görebilirsin.

Kod: Tümünü seç

Excel.range['c1:c100'].NumberFormat := '#.##0,00';
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: Excell Aktarma

Mesaj gönderen ozcank »

Lord_Ares Kardeşim excel de şu alanı bir türlü yapamadım DBGrid ekranda ;
0.8664 görünüyor excel e aktarılınca,
.8700000 görünüyor her ne yaptıysam olmadı.
bu şekilde ;
sheet.Columns['G'].NumberFormat := '#.####0,0000';
sheet.Columns['G'].NumberFormat := '##.##0';
sheet.Columns['G'].NumberFormat := '#.##0,00';

yardım eder misin ?
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Excell Aktarma

Mesaj gönderen Lord_Ares »

Sanırım Excel hücre ayarlarındaki decimal ayarları programdaki ile aynı yapmalısın. Exceldeki ayar rakamı yukarı yuvarlıyor. O yüzden hücrenin rakamsal ayarlarını kontrol et . Eğer hala olmazsa bu sefer windwostakileride kontrol etmen gerekebilir
Resim
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: Excell Aktarma

Mesaj gönderen ertank »

ozcank yazdı:Lord_Ares Kardeşim excel de şu alanı bir türlü yapamadım DBGrid ekranda ;
0.8664 görünüyor excel e aktarılınca,
.8700000 görünüyor her ne yaptıysam olmadı.
bu şekilde ;
sheet.Columns['G'].NumberFormat := '#.####0,0000';
sheet.Columns['G'].NumberFormat := '##.##0';
sheet.Columns['G'].NumberFormat := '#.##0,00';

yardım eder misin ?
Yanlış bilmiyor isem format belirtir iken her zaman ondalık nokta ile binler basamağı virgül ile ayrılır. Yukarıda tersni yapmışsınız. Aşağıdaki gibi denediğinizde sonuç ne oluyor?

Kod: Tümünü seç

sheet.Columns['G'].NumberFormat := '#,##0.0000';
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: Excell Aktarma

Mesaj gönderen ozcank »

ertank kardeşim senin dediğin gibi yaptım ; Oluyor fakat ne yaptıysam 1.5625 dbgrid de gözüküyor excel e 1.5600 yazıyor bunu yapamadım ,çözemedim.

sheet.Columns['D'].NumberFormat := '#,##0.0000';
sheet.Columns['E'].NumberFormat := '#,##0.0000';
sheet.Columns['F'].NumberFormat := '#,##0.0000';
sheet.Columns['G'].NumberFormat := '#,##0.0000';
sheet.Columns['H'].NumberFormat := '#,##0.0000';
sheet.Columns['I'].NumberFormat := '#,##0.0000';
sheet.Columns['J'].NumberFormat := '#,##0.0000';
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: Excell Aktarma

Mesaj gönderen ertank »

1) Excel içinde 1.5600 gözüküyor ama hücre değeri (fonksiyon yazılan kısımdaki değer) 1.5625 şeklinde mi?
2) İlgili hücre formatı nedir? Sağ tuş Hücre biçimlendir (Format Cells) dediğinizde karşınıza gelen ekranda gözüken nedir?
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: Excell Aktarma

Mesaj gönderen ozcank »

hayır 1.56 gözüküyor hücre biçimlendir de genel
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: Excell Aktarma

Mesaj gönderen ertank »

Excel hücre değeri bir şekilde doğru gönderilmemiş bu durumda. Aktarılan değerin 4 hane olduğuna emin misiniz?
Ya kaynak değeriniz sorunlu, ya da aktarımı yaptığınız kod ile ilgili bir sorununuz var.

Aşağıdaki şekilde kodunuzu değiştirip deneyebilirsiniz.

Kod: Tümünü seç

  if Col + 1 >= 4 then
  begin
    Sheet.Cells[Row, Col + 1].Value := DBGrid1.Fields[Col].AsFloat;
    Sheet.Cells[Row, Col + 1].NumberFormat := '#,##0.0000';
  end
  else
  begin
    Sheet.Cells[Row, Col + 1].Value := DBGrid1.Fields[Col].Value;
  end;
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: Excell Aktarma

Mesaj gönderen ozcank »

ertank kardeşim sorgum şu şekilde;

DBGrid1 ekranın da 1.5625
Excel de sağ tık hücrelere baktığımda Sayı / Ondalık ayracı işaretli ve ondalık basamağı 4 olarak tanım lı buna rağmen 1.5600 gösteriyor.
hücre içeriği ise 1.56

Kod: Tümünü seç

procedure TForm12.BitBtn2Click(Sender: TObject);
var ExcelApp, WBook, Excel, Sheet: OleVariant;
    Row, Col: Integer; // satır ve sütün için değişken
begin
//  if DBGrid1.DataSource.DataSet.IsEmpty then Exit;
  if NRapor1.IsEmpty then Exit; // ikiside aynı
  try
    ExcelApp := CreateOleObject('Excel.Application');
    WBook := ExcelApp.WorkBooks.Add;
    Sheet := WBook.WorkSheets[1];
    Sheet.Range['A1', 'K1'].Merge;
    Sheet.Range['A1','K1'].Font.Bold:=True;
    Sheet.Range['A1','K1'].Font.Color:=clRed;
    Sheet.Cells[1,1].Value:='Netsis Ayrıntılı K.D.V. İcman Raporu';
    Sheet.Cells[1,1].HorizontalAlignment := -4108;
    Sheet.Cells[1,1].Font.Size := 20;
    Sheet.Cells[2,1].Value:='Fatura No';
    Sheet.Cells[2,2].Value:='Tarih';
    Sheet.Cells[2,3].Value:='Cari İsim';
    Sheet.Cells[2,4].Value:='Brüt Tutar';
    Sheet.Cells[2,5].Value:='Satır İskontorsu';
    Sheet.Cells[2,6].Value:='Genel İskonto';
    Sheet.Cells[2,7].Value:='% 1 K.D.V.';
    Sheet.Cells[2,8].Value:='% 8 K.D.V.';
    Sheet.Cells[2,9].Value:='% 18 K.D.V.';
    Sheet.Cells[2,10].Value:='Genel Toplam';
    Sheet.Cells[2,11].Value:='Resmi Fatura No';
    Sheet.Range['A2','K2'].Font.Bold:=True;
    Sheet.Range['A2','K2'].Font.Color:=clRed;
   except
    ShowMessage('Excel başlatılamıyor.'); Exit;
  end;
  try
  with NRapor1 do
  begin
     Row := 3; // başlangıç 3. satır
     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 >= 4 then
         Sheet.Cells[Row, Col + 1].NumberFormat := '#,##0.0000';
       end;
       Next;
       Inc(Row); // Row := Row + 1;
     end;
     Sheet.Cells[Row, 4].Formula := '=SUM(D3:D' + InttoStr(Row - 1) + ')';
     Sheet.Cells[Row, 5].Formula := '=SUM(E3:E' + InttoStr(Row - 1) + ')';
     Sheet.Cells[Row, 6].Formula := '=SUM(F3:F' + InttoStr(Row - 1) + ')';
     Sheet.Cells[Row, 7].Formula := '=SUM(G3:G' + InttoStr(Row - 1) + ')';
     Sheet.Cells[Row, 8].Formula := '=SUM(H3:H' + InttoStr(Row - 1) + ')';
     Sheet.Cells[Row, 9].Formula := '=SUM(I3:I' + InttoStr(Row - 1) + ')';
     Sheet.Cells[Row,10].Formula := '=SUM(J3:J' + InttoStr(Row - 1) + ')';


     Sheet.Range['A' + InttoStr(Row), 'J' + InttoStr(Row)].Font.Color := 255;
     Sheet.Range['A' + InttoStr(Row), 'J' + InttoStr(Row)].Font.Bold := True;
  end;
  finally
    Sheet.Columns['A:J'].EntireColumn.AutoFit;
    sheet.Columns['A'].NumberFormat := '000000000000000';
    sheet.Columns['K'].NumberFormat := '000000000000000';
    sheet.Columns['D'].NumberFormat := '#,##0.0000';
    sheet.Columns['E'].NumberFormat := '#,##0.0000';
    sheet.Columns['F'].NumberFormat := '#,##0.0000';
    sheet.Columns['G'].NumberFormat := '#,##0.0000';
    sheet.Columns['H'].NumberFormat := '#,##0.0000';
    sheet.Columns['I'].NumberFormat := '#,##0.0000';
    sheet.Columns['J'].NumberFormat := '#,##0.0000';
    ExcelApp.Visible := True;
    ExcelApp := Null; WBook := Null; Sheet := Null;
  end;
end;
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: Excell Aktarma

Mesaj gönderen ertank »

Gönderdiğiniz kod içinde benim verdiğim değişiklik yok. İlgili döngü içine örnek kodu yazarak deneyebilir misiniz?
Cevapla