Stringgridden Excel Dosyası Kaydetme sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
naturelmania
Üye
Mesajlar: 66
Kayıt: 27 Nis 2006 09:29

Stringgridden Excel Dosyası Kaydetme sorunu

Mesaj gönderen naturelmania »

İyi günler arkadaşlar,

Benim sorunum forumumdaki stringgridden bir xls dosyasına kayıt yapmak istiyorum ama aynen exceldeki gibi her hücreye verilerin ayrı ayrı girilmesini istiyorum.
Forumda çok araştırma yaptım ama hep bölük pörçük bilgilere ulaşabildim. Yardımcı olabilirseniz sevinirim.
Naile hanımın daha önce yazmış olduğu stringaligngrid için excele dosya kaydetme procedurunu inceledim ama bi türlü çalıştıramadım. Kodu burda, bu yararlı olacaksa bunu nasıl çalıştırabilirim???

Kod: Tümünü seç

procedure SendExcel(rapor_grid:TStringAlignGrid;ExcelApplication1:TExcelApplication); 
var 
  RangeE: Excel2000.Range; 
  i,j, Row: Integer; 
  Format: OleVariant; 
begin 
  ExcelApplication1.Visible [0] := False; 
  ExcelApplication1.Workbooks.Add(null,0); 
  RangeE := ExcelApplication1.ActiveCell; 
  Format := '@'; 
  Row := 1; 
   try 
      for j := 0 to rapor_grid.RowCount - 1  do 
      begin 
        RangeE := ExcelApplication1.Range ['A' + IntToStr (Row),'A' + IntToStr (Row)]; 
        for i := 0 to rapor_grid.ColCount - 1  do 
        begin 
          RangeE.NumberFormat := Format; 
          RangeE.Value := rapor_grid.Cells[i,j]; 
          RangeE := RangeE.Next; 
        end; 
        Inc (Row); 
      end; 
  finally 
    ExcelApplication1.Visible [0] := True; 
    ExcelApplication1.Disconnect; 
  end; 
end;
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Forma ExcelApplication koydunmu
ayrıca Uses a kullandığın off. sürümüne göre " ExcelXP" v.s. eklemen lazım

benim gönderme şeklim;

Kod: Tümünü seç

procedure TSform.ExceleGnder1Click(Sender: TObject);
var
  v,sayfa:variant;{v excel prg, sayfa calisma sayfasi}
  say,i:integer;
begin
  AciksipQuery.open;
  say:=AciksipQuery.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}
  AciksipQuery.first;
  for i:=1 to say do
    begin
    sayfa.cells[i,1]:=ACIKsipQueryFISNO.text;
      sayfa.cells[i,2]:=ACIKsipQuerySTHAR_TARIH.text;
        sayfa.cells[i,3]:=ACIKsipQuerySTHAR_TESTAR.text;
            sayfa.cells[i,4]:=ACIKsipQuerySTOK_ADI.text;
                sayfa.cells[i,5]:=ACIKsipQueryEKALAN.text;
                    sayfa.cells[i,6]:=ACIKsipQuerySTHAR_GCMIK.text;
                        sayfa.cells[i,7]:=ACIKsipQuerySTHAR_NF.text;
                            sayfa.cells[i,8]:=ACIKsipQueryToplam_Tutar.text;
                                sayfa.cells[i,9]:=ACIKsipQueryISIM_SOYAD.text;
                                    sayfa.cells[i,10]:=ACIKsipQueryCARI_ISIM.text;
    AciksipQuery.next;
    end;
    sayfa.range['A1','L1000'].EntireColumn.AutoFit;
    sayfa.range['F1:H1000'].HorizontalAlignment :=-4152;
    v.visible:=true;//Exceli acip verileri goster
end;
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Mysterio
Üye
Mesajlar: 44
Kayıt: 18 Eki 2006 01:42

Mesaj gönderen Mysterio »

Bir ara ben de çokça aramıştım.
Kütüphanemden çalışan bir kod.
Düzenlemelerini yaparsın artık.

Dikkat etmen gereken olay koordinatlamalar.
Delphi sütun, satır şeklinde koordinatlandırılırken
Excel satır,sütun şeklinde koordinatlandırılıyor

uses
comobj

var
v,sayfa:variant;
i, j:integer;
begin
try
v:=createoleobject('excel.application'); //exceli oluştur
except
on E: Exception do
raise Exception.CreateFmt('Excel açılamadı. Sistem Mesajı: %s', [E.Message]);
end;

v.workbooks.add; //yeni calisma kitabini ekle
sayfa:=v.workbooks[1].worksheets[1]; {Birinci calisma sayfasini sayfa degiskenine ata}

for j:=2 to Stringgrid2.RowCount do
for i := 0 to StringGrid2.ColCount do
sayfa.cells[j,i+1]:=StringGrid2.Cells[i,j-1]+' ';
v.visible:=true; //Exceli göster
{
try
v.Save;
except
// kullanıcı kaydetme işlemini iptal etti.
end;
}
naturelmania
Üye
Mesajlar: 66
Kayıt: 27 Nis 2006 09:29

Mesaj gönderen naturelmania »

Cevaplarınız için çok teşekkür ediyorum. Hemen deneyip çalıştırıp çalıştıramadığımı yazacağım :D :wink:
İnşallah başlık diğer arkadaşların arayıp bulması için kolay olmuştur, çünkü forumda baya bi arayıp bulamamıştım :D :D

Edit: Arkadaşlar nedense worksheets yazınca "undeclared identifier" hatasını alıyorum??? sizce neden???

Yok yok sonunda çalıştı hata veriyormuş gibi gözüküyor ama doğru düzgün çalışıyor :D Oley ya sağolun arkadaşlar nasıl rahatladım bi bilseniz ;) Emeği geçen herkese çok teşekkür ediyorum :wink:
naturelmania
Üye
Mesajlar: 66
Kayıt: 27 Nis 2006 09:29

Mesaj gönderen naturelmania »

Ayrıca

Kod: Tümünü seç

procedure TForm1.FarklKaydet1Click(Sender: TObject);
var
karalama,sayfa:variant;
i, j:integer;
begin
try
karalama:=createoleobject('excel.application'); //exceli oluştur
except
on E: Exception do
raise Exception.CreateFmt('Excel açılamadı. Sistem Mesajı: %s', [E.Message]);
end;

karalama.workbooks.add; //yeni calisma kitabini ekle
sayfa:=karalama.workbooks[1].worksheets[1]; {Birinci calisma sayfasini sayfa degiskenine ata}

for j:=1 to Stringgrid1.RowCount do
for i := 0 to StringGrid1.ColCount do
sayfa.cells[j,i+1]:=StringGrid1.Cells[i,j-1]+' ';
karalama.visible:=false; //Exceli gösterme

try
karalama.save;
except
// kullanıcı kaydetme işlemini iptal etti.
end;

end;
Bu kodlarla kaydederken excel My Documents in içine ÖZGEÇMİŞ.XML diye bişi kaydediyo bunu bi türlü yokedemedim acaba neden kaynaklanıyor olabilir???
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Öncelikle, bu kurguladığın sistemde EXCEL dökümanı hep açık kalıyor diye değerlendiriyorum. Yani her işlemde yeni bir Excel dökümanı açıp öyle bırakılıyor.

- Aşağıdaki şekilde denersen sorun kalmaz... Kaydedilecek dosya adını belirlemek için delphideki SaveDialog'dan faydalanabilirsin.

Kod: Tümünü seç

  try
    karalama.ActiveWorkBook.saveas('Deneme.XLS');
  except
    // kullanıcı kaydetme işlemini iptal etti.
  end;
  karalama.ActiveWorkBook.Close;
  karalama.quit;
  karalama := unassigned;
Resim
Resim ....Resim
naturelmania
Üye
Mesajlar: 66
Kayıt: 27 Nis 2006 09:29

Mesaj gönderen naturelmania »

Arkadaşlar vermiş olduğunuz kod harika çalışıyor.
Emeğiniz için çok teşekkür ediyorum :)
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

viewtopic.php?t=18217

Tafsiye ederim hem basit hem çok hızlı ;)

Kolay gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Cevapla