Excel Kapandıktan sonra arkaplanda çalışıyor...
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Excel Kapandıktan sonra arkaplanda çalışıyor...
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;
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;
Kod: Tümünü seç
ExcelFile.visible:=false;//Exceli acip verileri at
ExcelFile.Save; // kaydet kapat
ExcelFile.quit;
ExcelFile:=Unassigned;
üsteki kodla işimi gördüm sağlıklı çalışıyormege yazdı:Kod: Tümünü seç
ExcelFile.visible:=true;//Exceli acip verileri at ExcelFile:=Unassigned;
Teşekkür ederim Üstad
Kod: Tümünü seç
ExcelFile.ActiveWorkbook.Saved:=TRUE;
ExcelFile.ActiveWorkbook.SaveCopyAs('d:\d.xls');
ExcelFile.quit;
ExcelFile:=Unassigned;
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);
Kod: Tümünü seç
ExcelSheet.cells[satir,9] := '=SUM(B' + inttostr(satir)+
':H' + inttostr(satir) + ')';

grafik veya resim eklemeye izin vermiyor. en azından bu yöntemle.
iyi çalışamlar
Selamlar,
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
Burada bir şey dikkatimi çekti,ademiz yazdı:üsteki kodla işimi gördüm sağlıklı çalışıyormege yazdı:Kod: Tümünü seç
ExcelFile.visible:=true;//Exceli acip verileri at ExcelFile:=Unassigned;
Teşekkür ederim Üstad
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/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kod: Tümünü seç
ExcelFile.ActiveWorkbook.Saved:=TRUE; ExcelFile.ActiveWorkbook.SaveCopyAs('d:\d.xls');