Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
DBGrid den Excel Aktarımı
#1
Arkadaşlar Merhaba , bir knuda yardıma ihtiyacım var şöyle;
Delphi 7 kullanıyorum DBGrid1 deki verileri excel e aktarıyorum fakat "Belge No" , "Cari Kodu" alanlarının başında sıfır varsa excel e sıfırsız yazıyor nasıl düzeltebilirim?  

if Col>= 6 then
        Sheet.Cells[Row,Col].NumberFormat := '########'; // Cari Kod
       if Col>= 5 then
       Sheet.Cells[Row,Col].NumberFormat := '0,00'; // Miktar
       if Col>= 8 then
       Sheet.Cells[Row,Col].NumberFormat := '0,00'; // Brüt Tutar
Cevapla
#2
Selamlar
Formatfloat işleminşi yaptıktan sonra excel aktarımını yapmanız uygun olacaktır.
Aşağıdaki linki takip ediniz.
http://www.delphibasics.co.uk/RTL.asp?Name=FormatFloat
Yazılımcı, kahveyi koda çeviren bir organizmadır.
Cevapla
#3
Excele sıfırsız yazmasının nedeni , exceldeki ilgili sütünun hücre biçimlendir kısmından sayısal olarak ayarlamadığın için yapıyor olabilir. Sen bilgiyi gönderirken ne kadar formatlarsan formatla hücre ayarları yapılmadıysa garip çıktılar alabilirsin. Baştan onu kontrol etmeni tavsiye ederim.
Cevapla
#4
Hocam dbgriddeki verileri excele nasıl aktarıyorsunuz? Kodları paylaşmanız mümkün mü?
Cevapla
#5
Bu şekilde yaptım ama hata veriyor ;


---------------------------
Debugger Exception Notification
---------------------------
Project MENU.exe raised exception class EOleException with message 'Erişim Hatası :  'EXCELKAYIT.xls''. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help   
---------------------------


    While not(DBGDataset.Eof) do
   begin
float := 00000000;

     k2:=k2+1;
     For k1:=0 to DBG.Columns.Count-1 do
     begin
              if Col>= 2 then
        Sheet.Cells[Row,Col].FormatFloat('00000000', float); // Cari Kod

       Sheet.Cells[k2,k1+1]:=DBG.Columns[k1].Field.AsString;
       Sheet.Columns['A:AC'].EntireColumn.AutoFit;
     end;
     DBGDataset.Next;
   end;
   WORKBOOK.SaveAs(FileName);   /////////////////////// Burada hata veriyor.
   ShowMessage('Excell Formatında Kayıt Tamamlandı');
 finally
   EXCEL.DisplayAlerts := False;
   EXCEL.Quit;
   EXCEL:=Unassigned;
   DBGDataset.RecNo:=k3;
   DBGDataset.EnableControls;
 end;
end;
Cevapla
#6
Selamlar
aşağıda örneği kendinize uyarlayabilirsiniz.

procedure TForm5.SpeedButton4Click(Sender: TObject);
var
 v,sayfa:variant;{v excel prg, sayfa calisma sayfasi}
 say,i:integer;
begin
 say:=dm.qryyuklenenkdv.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}
 dm.qryyuklenenkdv.first;
 sayfa.cells[4,2]:='Sıra No';
 sayfa.cells[4,3]:= 'Alış Faturasının Tarihi' ;
 sayfa.cells[4,4]:='Alış Faturasının Serisi';
 sayfa.cells[4,5]:='Alış Faturasının Sıra Nosu';
 sayfa.cells[4,6]:='Satıcının Adı-Soyadı / Ünvanı';
 sayfa.cells[4,7]:='Satıcının Vergi Kimlik Numarası/TC Kimlik Numarası';
 sayfa.cells[4,8]:='Alınan Mal ve/veya Hizmetin Cinsi';
 sayfa.cells[4,9]:='Alınan Mal ve/veya Hizmetin Miktarı';
 sayfa.cells[4,10]:='Alış Faturasının KDV Hariç Tutarı';
 sayfa.cells[4,11]:='Alış Faturasının KDVsi';
 sayfa.cells[4,12]:='Bünyeye Giren Mal ve/veya Hizmetin KDVsi';
 sayfa.cells[4,13]:='GGB Tescil Nosu (Alış İthalat İse)';
 sayfa.cells[4,14]:='Belgeye İlişkin İade Hakkı Doğuran İşlem Türü';
 sayfa.cells[4,15]:='Yüklenim Türü';
 sayfa.cells[2,8]:='YÜKLENİLEN KDV LİSTESİ';

 for i:=1 to say do
   begin
   sayfa.cells[i+4,2]:= i ;
   sayfa.cells[i+4,3]:=dm.qryyuklenenkdv.FieldByName('FATURATARIHI').text;
   sayfa.cells[i+4,4]:=dm.qryyuklenenkdv.FieldByName('FATURASERI').text;
   sayfa.cells[i+4,5]:=dm.qryyuklenenkdv.FieldByName('FATURANO').text;
   sayfa.cells[i+4,6]:=dm.qryyuklenenkdv.FieldByName('FIRMAUNVANI').text;
   sayfa.cells[i+4,7]:=dm.qryyuklenenkdv.FieldByName('VN').text;
   sayfa.cells[i+4,8]:=dm.qryyuklenenkdv.FieldByName('STOKKODU').text;
   sayfa.cells[i+4,9]:=dm.qryyuklenenkdv.FieldByName('MIKTAR').text;
   sayfa.cells[i+4,10]:=dm.qryyuklenenkdv.FieldByName('FATURAARATOPLAM').text;
   sayfa.cells[i+4,11]:=dm.qryyuklenenkdv.FieldByName('FATURAKDV').text;
   sayfa.cells[i+4,12]:=dm.qryyuklenenkdv.FieldByName('URUNKDV').text;
   sayfa.cells[i+4,15]:=dm.qryyuklenenkdv.FieldByName('YUKLENIMTURU').text;
   dm.qryyuklenenkdv.next;
   end;
   v.visible:=true;//Exceli acip verileri goster
   sayfa.Columns.AutoFit;// kolonları otomatik genişletir...
end;
Yazılımcı, kahveyi koda çeviren bir organizmadır.
Cevapla
#7
Erişim hatası almanızın iki nedeni olabilir.
1) Dosyayı kaydettiğiniz yer C gibi bir izin ise windows yazma izni vermiyor olabilir.
Deneyebileceklerin
- Windows uac kapalımı kontrol edin.
- Programınızı delphiden değil de oluşturduğunuz exe yi yönetici olarak çalıştırıp deneyin.
2 ) Delphi ile excel sayfasını create edip kullandığınız için arkada çalışıyor olabilir. Kodunuzdaki WORKBOOK.SaveAs(FileName) kısmını finally bloğuna alıp deneyin. Burada ki display alert kısmını true yapıp gözlemleyin.
Cevapla
#8
Emeği geçen arkadaşlarıma teşekkür ederim. İyi Bayramlar. Sağlıklı ve Mutluluk içerisinde.

Sorunu bu şekilde çözdum;


  Sheet:=WorkBook.WorkSheets[1];
 try
   For k1:=0 to DBG.Columns.Count-1 do
   begin
     Sheet.Cells[1,k1+1]:=DBG.Columns[k1].Title.Caption;
     Sheet.Columns[k1+1].ColumnWidth:=(0.139*DBG.Columns[k1].Width);
     Sheet.Columns[K1+2].NumberFormat := '@'; //Text olarak kolonu düzelttim.

     Sheet.Range['A1','AD1'].Font.Bold:=True;
     Sheet.Range['A1','AD1'].Font.Color:=clRed;

 end;
   DBGDataset.First;  k2:=1;
   While not(DBGDataset.Eof) do
   begin
Cevapla
#9
Arkadaşlar. Hepinizin bayramını kutluyorum .İyi bayramlar.

Hücrenin toplamını SUM ile almak istedim ama bir yerde yanlışım var sanırım yardımcı olabilecek misiniz?


 end;
    DBGDataset.First;  k2:=1;
   While not(DBGDataset.Eof) do
   begin
     k2:=k2+1;
     For k1:=0 to DBG.Columns.Count-1 do
     begin
       Sheet.Cells[K2,K1+8].Formula := '=SUM(H3:H' + InttoStr(K2 - 1) + ')';
       Sheet.Cells[k2,k1+1]:=DBG.Columns[k1].Field.AsString;
       Sheet.Columns['A:AC'].EntireColumn.AutoFit;
     end;
    DBGDataset.Next;
   end;
   WORKBOOK.SaveAs(FileName);
   ShowMessage('Excell Formatında Kayıt Tamamlandı');
Cevapla
#10
(13-05-2021, Saat: 15:07)OZCANK Adlı Kullanıcıdan Alıntı: Arkadaşlar. Hepinizin bayramını kutluyorum .İyi bayramlar.

Hücrenin toplamını SUM ile almak istedim ama bir yerde yanlışım var sanırım yardımcı olabilecek misiniz?


 end;
    DBGDataset.First;  k2:=1;
   While not(DBGDataset.Eof) do
   begin
     k2:=k2+1;
     For k1:=0 to DBG.Columns.Count-1 do
     begin
       Sheet.Cells[K2,K1+8].Formula := '=SUM(H3:H' + InttoStr(K2 - 1) + ')';
       Sheet.Cells[k2,k1+1]:=DBG.Columns[k1].Field.AsString;
       Sheet.Columns['A:AC'].EntireColumn.AutoFit;
     end;
    DBGDataset.Next;
   end;
   WORKBOOK.SaveAs(FileName);
   ShowMessage('Excell Formatında Kayıt Tamamlandı');

Baktığım iki örnekte şu şekilde

ExcelApp.Range['A11', 'A11'].Formula := '=Sum(A1:A10)';

ExcelSheet.cells[satir,9] := '=SUM(B' + inttostr(satir)+':H' + inttostr(satir) + ')'


Excel deki hücreye formul yazmak için diye birşey paylaşılmış

Function ExcelSetCellFormula(
  Excel         : Variant;
 FormulaString : ShortString;
 RowNum, ColNum: Integer): Boolean;
Begin
 Result := True;
 Try
   Excel.
     ActiveSheet.
       Cells[RowNum, ColNum].
         Formula := FormulaString;
 Except
   Result := False;
 End;
End;

Excel hücresindeki formulü getirir.
Function ExcelGetCellFormula(

  Excel         : Variant;

  RowNum, ColNum: Integer): ShortString;

Begin

  Result := ' ';

  Try

    Result := Excel.

                ActiveSheet.

                Cells[RowNum, ColNum].

                Formula;

  Except

    Result := ' ';

  End;
End;
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  DBGrid Columns Otomatik Boyutlandırma Halil Han BADEM 8 8.208 23-01-2025, Saat: 14:51
Son Yorum: OZCANK
  dbgrid sutun toplamini alip lazreport da gostermek sadikacar60 6 1.113 02-12-2024, Saat: 12:21
Son Yorum: sadikacar60
  Excel içeri alma Para birimi gonulali 3 845 28-10-2024, Saat: 05:34
Son Yorum: griposter
Question Fastreport - OleObject - Excel Etkileşimde Bulunma YILDIRIMBEY 2 839 05-08-2024, Saat: 12:11
Son Yorum: YILDIRIMBEY
  Excel tablosuna resim ekleme enigma 3 1.211 21-05-2024, Saat: 12:16
Son Yorum: enigma



Konuyu Okuyanlar: 1 Ziyaretçi