Excel Kapandıktan sonra arkaplanda çalışıyor...

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
ademiz
Üye
Mesajlar: 151
Kayıt: 30 Tem 2003 02:41
Konum: İstanbul
İletişim:

Excel Kapandıktan sonra arkaplanda çalışıyor...

Mesaj gönderen ademiz »

Arkadaşlar Merhaba

Aşağıdaki kodla Excel'e çıktı atıyorum ve güzelde oluyor.Fakat bir sorunum var.

Butonu çalıştırıp Excel'i açıyorum sonra işim excelle bitince excel'i kapatıyorum.Excel kapanınca arkaplanda çalışmaya devam ediyor.Windows Görev Yöneticisini açıyorum işlemler kısmında excel.exe çalışıyor gözüküyor.

Bunun zararı kullandığımız programdan her excel'e veri gönderdiğimizde açılan excel sayfalarını kapatsak bile arkaplanda kaçtane excel sayfası açmış iseniz o kadar excel.exe çalışıyor.Buda windows'un kaynaklarının tükenmesine sebep oluyor.

Bu konuda yardımlarınızı bekliyorum hepinize Saygılar

***************************************************

procedure TGenelForm.BitbtnExcelClick(Sender: TObject);
var
v,sayfa:variant;
i,d,k:integer;
r:variant;
begin
RaporQuery.First;
v := createoleobject('excel.application');
v.workbooks.add;
sayfa := v.workbooks[1].worksheets[1];
r := v.activeworkbook.worksheets[1].cells[1];
k := 0;

repeat
r.cells[1,k+1].font.color := clBlue;
r.cells[1,k+1].font.bold := true;
r.cells[1,k+1] := RaporQuery.Fields[k].DisplayLabel;
k := k+1;
until k = RaporQuery.Fields.Count;
i := 0;
d := 1;
while Not RaporQuery.eof do
begin
i := i+1;
d := d+1;
r.cells[1+d,i] := RaporQuery.FieldByName('UyeNo').AsString;
r.cells[1+d,i+1] := RaporQuery.FieldByName('KimlikNo').AsString;
r.cells[1+d,i+2] := RaporQuery.FieldByName('SeriNo').AsString;
r.cells[1+d,i+3] := RaporQuery.FieldByName('Soyadi').AsString;
r.cells[1+d,i+4] := RaporQuery.FieldByName('Adi').AsString;
r.cells[1+d,i+5] := RaporQuery.FieldByName('BabaAdi').AsString;
r.cells[1+d,i+6] := RaporQuery.FieldByName('AnaAdi').AsString;
r.cells[1+d,i+7] := RaporQuery.FieldByName('DogumYeri').AsString;
r.cells[1+d,i+8] := RaporQuery.FieldByName('DogumTarihi').AsDateTime;
r.cells[1+d,i+9] := RaporQuery.FieldByName('MedeniDurumu').AsString;
r.cells[1+d,i+10] := RaporQuery.FieldByName('Meslegi').AsString;
r.cells[1+d,i+11] := RaporQuery.FieldByName('MeslekiTecrube').AsString;
r.cells[1+d,i+12] := RaporQuery.FieldByName('OgrenimDurumu').AsString;
r.cells[1+d,i+13] := RaporQuery.FieldByName('MuracaatTarihi').AsDateTime;
r.cells[1+d,i+14] := RaporQuery.FieldByName('MYBKullanacagiOkul').AsString;
r.cells[1+d,i+15] := RaporQuery.FieldByName('MYBGecerliOlacagiTarih').AsString;
r.cells[1+d,i+16] := RaporQuery.FieldByName('EsnafSicilNo').AsString;
r.cells[1+d,i+17] := RaporQuery.FieldByName('UstalikBelgeNo').AsString;
r.cells[1+d,i+18] := RaporQuery.FieldByName('KalfalikBelgeNo').AsString;
r.cells[1+d,i+19] := RaporQuery.FieldByName('VergiDairesi').AsString;
r.cells[1+d,i+20] := RaporQuery.FieldByName('VergiNo').AsString;
r.cells[1+d,i+14] := RaporQuery.FieldByName('BagkurNo').AsString;
r.cells[1+d,i+15] := RaporQuery.FieldByName('SSKNo').AsString;
r.cells[1+d,i+16] := RaporQuery.FieldByName('EvTel').AsString;
r.cells[1+d,i+17] := RaporQuery.FieldByName('IsTel').AsString;
r.cells[1+d,i+18] := RaporQuery.FieldByName('Fax').AsString;
r.cells[1+d,i+19] := RaporQuery.FieldByName('Gsm').AsString;
r.cells[1+d,i+20] := RaporQuery.FieldByName('EvAdresi').AsString;
r.cells[1+d,i+20] := RaporQuery.FieldByName('IsAdresi').AsString;
RaporQuery.Next;
i := 0;
end;
v.visible := true;
end;
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

v := createoleobject('excel.application');

bu v objesini yok etmeniz lazım. yoksa oo birikirrde birikir. :D
Kullanıcı avatarı
ademiz
Üye
Mesajlar: 151
Kayıt: 30 Tem 2003 02:41
Konum: İstanbul
İletişim:

Mesaj gönderen ademiz »

Hocam sorun zaten o nu yok edemememde

free;

metodunu deniyorum hata veriyor.

gerekli kodu biliyorsanız memnun olurum
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

Kod: Tümünü seç

     ExcelFile.visible:=false;//Exceli acip verileri at

     ExcelFile.Save; // kaydet kapat 
     ExcelFile.quit;
     ExcelFile:=Unassigned;
ben bu şekilde kullanıyorum.
Armani
Üye
Mesajlar: 104
Kayıt: 18 Mar 2004 05:32
Konum: Ankara

Mesaj gönderen Armani »

mege bendede bu problem vardı

teşekkürler
Kullanıcı avatarı
ademiz
Üye
Mesajlar: 151
Kayıt: 30 Tem 2003 02:41
Konum: İstanbul
İletişim:

Mesaj gönderen ademiz »

mege yazdı:

Kod: Tümünü seç

     ExcelFile.visible:=true;//Exceli acip verileri at

     ExcelFile:=Unassigned;
üsteki kodla işimi gördüm sağlıklı çalışıyor

Teşekkür ederim Üstad
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

Kod: Tümünü seç

     ExcelFile.ActiveWorkbook.Saved:=TRUE;
     ExcelFile.ActiveWorkbook.SaveCopyAs('d:\d.xls');

     ExcelFile.quit;
     ExcelFile:=Unassigned;
Konu altına bikaç ek daha yapmak istedim.
bunlarda adından anlaşılır herhalde ne yaptıkları. özellikle saved benim çok işiime yaramıştı :)

Kod: Tümünü seç

//ExcelFile.ActiveWorkbook.SaveAs('c:\b.txt', -4158, False);
buda txt farklı kaydet. -4158 txt dosya, csv filan seçmek için bi makro yazıp xlCsv nin integer karşılığını öğrenirseniz csv de yazıyor.

Kod: Tümünü seç

ExcelSheet.cells[satir,9] := '=SUM(B' + inttostr(satir)+
                                  ':H' + inttostr(satir) + ')';
satıra formül eklemek için ingilizcelerini kullanmak lazım. örnekteki gibi ; topla() işe yaramıyor :D

grafik veya resim eklemeye izin vermiyor. en azından bu yöntemle.
iyi çalışamlar
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,
ademiz yazdı:
mege yazdı:

Kod: Tümünü seç

     ExcelFile.visible:=true;//Exceli acip verileri at

     ExcelFile:=Unassigned;
üsteki kodla işimi gördüm sağlıklı çalışıyor

Teşekkür ederim Üstad
Burada bir şey dikkatimi çekti,

ExcelFile.Quit'i kullanmamışsınız ve sonra
ExcelFile := Unassigned
demişsiniz.

Yalnız böyle Quit olmadan yaparsanız. Her ne kadar Excel'i göremeseniz de arka tarafta UnAssigned bir Bellek bölgesi hafızada kilitli kalabilir ve birkaç kez girip çıktıktan sonra Windows Memory'si kalmayıp Swap'a abanır ve yavaşlar, taaa ki windows şiştim artık bundan öteye gidemem deyip Memory hatası verene kadar (Gibime geliyor)

Bu sebeple Excel.Quit'i bence kullanın. (Belki Delphi kendisi yakalayıp boşaltabilir ama ne olur ne olmaz, Microsoft'a güven olmaz.)

Siz bence Manuel yapın :)

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
ademiz
Üye
Mesajlar: 151
Kayıt: 30 Tem 2003 02:41
Konum: İstanbul
İletişim:

Mesaj gönderen ademiz »

Hocam

ExcelFile.Quit'i kullanınca excel açılınca kaydet çıkıyor.Bunu engellemek için kaldırdım.Ama 5-6 kere excel'e bilgi gönderdim windows ta bir anormallik olmadı.Ama kullandığım XP bu demek değilki 98 de normal çalışır.

Dediğinizde isabetlisiniz!

Saygılar
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

Kod: Tümünü seç

ExcelFile.ActiveWorkbook.Saved:=TRUE; ExcelFile.ActiveWorkbook.SaveCopyAs('d:\d.xls');
hocam kayıt için bunu kullanabilirsiniz.
Cevapla