Delphi Can
DBGrid den Excel Aktarımı - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6)
+--- Konu Başlığı: DBGrid den Excel Aktarımı (/showthread.php?tid=5985)

Sayfalar: 1 2 3 4


DBGrid den Excel Aktarımı - OZCANK - 11-05-2021

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



DBGrid den Excel Aktarımı - shooterman - 11-05-2021

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


DBGrid den Excel Aktarımı - CesuR - 12-05-2021

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.


DBGrid den Excel Aktarımı - sunbeki - 12-05-2021

Hocam dbgriddeki verileri excele nasıl aktarıyorsunuz? Kodları paylaşmanız mümkün mü?


Cvp: DBGrid den Excel Aktarımı - OZCANK - 12-05-2021

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;



DBGrid den Excel Aktarımı - shooterman - 12-05-2021

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;



DBGrid den Excel Aktarımı - CesuR - 13-05-2021

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.


Cvp: DBGrid den Excel Aktarımı - OZCANK - 13-05-2021

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



Cvp: DBGrid den Excel Aktarımı - OZCANK - 13-05-2021

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ı');



Cvp: DBGrid den Excel Aktarımı - CesuR - 13-05-2021

(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;