Excel dosyasına kayıtta sorun (ole object kullanıyorum)

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

Excel dosyasına kayıtta sorun (ole object kullanıyorum)

Mesaj gönderen naturelmania »

Arkadaşlar programımda exceli ole object olarak açtırıp bir stringgriddeki verileri dosyaya kaydediyorum. Kodları aşağıda

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 couldn"t open. 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
  savedialog1.Execute;
  karalama.activeworkbook.saveas(savedialog1.FileName);
except
karalama.ActiveWorkBook.Close;
  karalama.quit;
  karalama:=unassigned;// kullanıcı kaydetme işlemini iptal etti.
end;
  karalama.ActiveWorkBook.Close;
  karalama.quit;
  karalama:=unassigned;
end;
Fakat benim istediğim birkaç yerdeki edit dosyasını da bu kaydın en baş kısmına kaydetmesi. Yani excel dosyasında, önce bir editin içinden alınmış isim soyisim vs. yazılması ve ardından stringgriddeki dosyaların yazılması.

İlk düşündüğüm bu döngüdeki i ve j sayılarını 10 hane arttırmak ve böylece dosyaların bikaç satır veya bikaç sütun kaydırmaktı. Böylelikle o boşluğa diğer editlerdeki verileri yazabilecektim fakat böyle olmadı :(

Ben de bütün verileri öncelikle başka bi stringgride sıralı bi şekilde atayım ordan yazdırayım diye düşündüm ama sanki böyle yapacağıma daha kısa bir çıkış yolu varmış gibi geldi ve 2 saattir üzerinde düşünüyorum.
Olmazsa bu söylediğimi yapacağım sanırım :cry:

Yardımcı olabilirseniz çok sevinirim :) Herkese kolay gelsin iyi geceler...
var
sen : sevgili;
ben : aşık;
sevgi: aşk;
if ben aşık sana = True then
execute sevgi between(sen,ben);
:)))))
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Mesaj gönderen Battosai »

ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

İlk düşündüğüm bu döngüdeki i ve j sayılarını 10 hane arttırmak ve böylece dosyaların bikaç satır veya bikaç sütun kaydırmaktı. Böylelikle o boşluğa diğer editlerdeki verileri yazabilecektim fakat böyle olmadı Sad
neden olmasın ya. bu yöntemi bende kullanmıştım kurları excele atarken... bir hesap hatası yapıyorsun.

illede emin olacağım diyorsan a: gibi bir deger kullan atıyorum 5 olsun sonra dongude i+a cell numarasına yaz
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
naturelmania
Üye
Mesajlar: 66
Kayıt: 27 Nis 2006 09:29

Mesaj gönderen naturelmania »

Arkadaşlar sorunumu sonunda çözdüm. Ben j:=j+5 kodunu yanlış yere giriyormuşum. Yani döngünün içindeki değerleri değiştirmem gerekirken döngüye girmeden önceki yere bu kodu yazıyormuşum. Yani bu kodu:

Kod: Tümünü seç

j:=j+5
for j:=1 to Stringgrid1.RowCount do
for i := 0 to StringGrid1.ColCount do
sayfa.cells[j,i+1]:=StringGrid1.Cells[i,j-1]+' ';
bu halde j:=j+5 kodunu silip döngünün içindeki j'ye +5 ekleyerek üstten 5 satırlık alanı boş bıraktırabiliyorum... Yani şöyle:

Kod: Tümünü seç

for j:=1 to Stringgrid1.RowCount do
for i := 0 to StringGrid1.ColCount do
sayfa.cells[j+5,i+1]:=StringGrid1.Cells[i,j-1]+' ';
var
sen : sevgili;
ben : aşık;
sevgi: aşk;
if ben aşık sana = True then
execute sevgi between(sen,ben);
:)))))
Cevapla