Excele Formül yazdırma..

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
cmkare
Üye
Mesajlar: 177
Kayıt: 23 Ağu 2010 11:29

Excele Formül yazdırma..

Mesaj gönderen cmkare »

procedure TForm1.ExceleGonder(TABLO: TADOTable);
var
v,sayfa:variant;
say,i:integer;
begin
If TABLO.Active=False Then TABLO.Open;
say:=TABLO.recordcount;
v:=createoleobject(’excel.application’);
v.workbooks.add;
sayfa:=v.workbooks[1].worksheets[1];
i:=1;
sayfa.cells[i,1]:=’ID’;
sayfa.cells[i,2]:=’BIRIM/BIRLIK’;
sayfa.cells[i,3]:=’BIMNU’;
sayfa.cells[i,4]:=’CIHAZINCINSI’;
sayfa.cells[i,5]:=’MARKASI’;
sayfa.cells[i,6]:=’MODELI’;
sayfa.cells[i,7]:=’SERISİ’;
sayfa.cells[i,8]:=’ISLEMCI’;
sayfa.cells[i,9]:=’RAM’;
sayfa.cells[i,10]:=’HDD’;

TABLO.First;
for i:=2 to say+1 do
begin
sayfa.cells[i,1]:=TABLO.FieldByName(’ID’).Text;
sayfa.cells[i,2]:=TABLO.FieldByName(’BIRIM/BIRLIK’).Text;
sayfa.cells[i,3]:=TABLO.FieldByName(’BIMNU’).Text;
sayfa.cells[i,4]:=TABLO.FieldByName(’CIHAZINCINSI’).Text;
sayfa.cells[i,5]:=TABLO.FieldByName(’MARKASI’).Text;
sayfa.cells[i,6]:=TABLO.FieldByName(’MODELI’).Text;
sayfa.cells[i,7]:=TABLO.FieldByName(’SERISİ’).Text;
sayfa.cells[i,8]:=TABLO.FieldByName(’ISLEMCI’).Text;
sayfa.cells[i,9]:=TABLO.FieldByName(’RAM’).Text;
sayfa.cells[i,10]:=TABLO.FieldByName(’HDD’).Text;
TABLO.Next;
end;
v.visible:=true;//Exceli acip verileri goster
end;

--------------------------------------------------------------------------------------------------------------------------------------------

Merhaba.

ben yukarıdaki kodlarla excele aktardığımda
E2,F2,G2,H2
E3,F3,G3,H3
E4,F4,G4,H4
.......
.....
...
hücrelerinde değerlerim var. ben bu değerleri şu şekilde

v.ActiveSheet.Cells[i,11].Formula:= ’=E2+F2+G2+H2’;

11.alana yazdırdığım zaman aşağıya doğru hep
=E2+F2+G2+H2
=E2+F2+G2+H2
=E2+F2+G2+H2
=E2+F2+G2+H2
.....
..
böyle yazıyor yani o alanı topluyor hep.. Ben artarak gitmesini istiyorum şu şekilde..

E2+F2+G2+H2
E3+F3+G3+H3
E4+F4+G4+H4
.......
.....
...
veri tabanındaki bilgieri nasıl altalta aktarıyorsa bu değerleride karşısındaki hücrelere göre atmasını istiyorum..
bunun için ne yapmam lazım?
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: Excele Formül yazdırma..

Mesaj gönderen orhancc »

Kod: Tümünü seç

v.ActiveSheet.Cells[i,11].Formula:= ’=E2+F2+G2+H2’; 
burdaki sayılar yerine bi tane değişken tanımla ve onları arttır sürekli. Şunu bir dene bakalım işine yarayacak mı?

Kod: Tümünü seç

var
 i:int;
begin
  i:=2;
  v.ActiveSheet.Cells[i,11].Formula:= ’=E+inttostr(i)+F+inttostr(i)+G+inttostr(i)+H+inttostr(i)’;
  inc(i);
end;
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Excele Formül yazdırma..

Mesaj gönderen conari »

Kod: Tümünü seç

v.ActiveSheet.Cells[i,11].Formula:= '=Sum(E'+inttostr(i)+':H'+inttostr(i)+')';
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
cmkare
Üye
Mesajlar: 177
Kayıt: 23 Ağu 2010 11:29

Re: Excele Formül yazdırma..

Mesaj gönderen cmkare »

Peki böyle bir kod yazmak istediğimde ne yapmam lazım?
hata veriyor..
Örneğin 1 : =EĞER(TOPLA(E4;F4;G4;H4)>0;TOPLA(E4;F4*2;G4*3;H4*4)/I4;0)
Örneğin 2 : =TOPLA.ÇARPIM($E$2:$H$2;$E4:$H4)/$I4/100
cmkare
Üye
Mesajlar: 177
Kayıt: 23 Ağu 2010 11:29

Re: Excele Formül yazdırma..

Mesaj gönderen cmkare »

Alanın String, integer olduğundanmı kaynaklanıyor.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Excele Formül yazdırma..

Mesaj gönderen conari »

Kod: Tümünü seç

v.ActiveSheet.Cells[i,11].Formula:= '=if(Sum(E'+inttostr(i)+':H'+inttostr(i)+')>0;Sum(E'+inttostr(i)+';F+inttostr(i)*2+';G+inttostr(i)*3+';H+inttostr(i)*4')/+'I+inttostr(i);0)';
Delphide denemedim.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
cmkare
Üye
Mesajlar: 177
Kayıt: 23 Ağu 2010 11:29

Re: Excele Formül yazdırma..

Mesaj gönderen cmkare »

F+inttostr(i)*2+...

*2, *3, *4 tırnak yada çarpı hataları var. Gyi tanımıyor.
cmkare
Üye
Mesajlar: 177
Kayıt: 23 Ağu 2010 11:29

Re: Excele Formül yazdırma..

Mesaj gönderen cmkare »

Konu güncel... çözülemedi sorun..
cmkare
Üye
Mesajlar: 177
Kayıt: 23 Ağu 2010 11:29

Re: Excele Formül yazdırma..

Mesaj gönderen cmkare »

Yokmu şimdi bu konuyla bir bilgisi olan?
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Excele Formül yazdırma..

Mesaj gönderen mrmarman »

Excel ile OleAutomation çalışacaksanız, her adımınızı Excel Macro yapısına uygun kurgulamanız lazım. Bunu test etmek ve uygulamanın en iyi ve tek yolu Excel içinde Macro Kaydet deyip yapmak istediğiniz kurguyu hazırlayın. Sonra da Makro düzenle deyip yaptığınız işlemi Excel'in nasıl algıladığını irdeleyin.

Mesela sizin işlemleri Excel'e verdiğimizde aşağıdaki gibi bir algıyla karşılaşıyoruz.

Kod: Tümünü seç

Sub Makro1()
'
' Makro1 Makro
'

'
    ActiveCell.FormulaR1C1 = _
        "=IF(SUM(R[-2]C[3],R[-2]C[4],R[-2]C[5],R[-2]C[6])>0,SUM(R[-2]C[3],R[-2]C[4]*2,R[-2]C[5]*3,R[-2]C[6]*4)/R[-2]C[7],0)"
    Range("B7").Select
    ActiveCell.FormulaR1C1 = "=SUMPRODUCT(R2C5:R2C8,R[-3]C5:R[-3]C8)/R[-3]C9/100"
    Range("B8").Select
End Sub

Bunu biz programımıza uyguladığımızda da şöyle oluyor...

Kod: Tümünü seç

Uses ComObj;

procedure TForm1.BitBtn1Click(Sender: TObject);
Const
  xlWBATWorksheet    = $FFFFEFB9;
Var
  xExcel,
  xRange      : OleVariant;
begin
  Try
    xExcel := CreateOleObject('Excel.Application');
    xExcel.Workbooks.Add(xlWBatWorkSheet);
    xExcel.Workbooks[1].WorkSheets[1].Name := 'Formül TEST';
  Except
    MessageDlg('İşlem Başarısız...', mtError, [mbOk], 0);
    Exit;
  End;
  xExcel.Range['E2'] := 10;
  xExcel.Range['F2'] := 20;
  xExcel.Range['G2'] := 30;
  xExcel.Range['H2'] := 40;

  xExcel.Range['E4'] :=  5;
  xExcel.Range['F4'] := 10;
  xExcel.Range['G4'] := 15;
  xExcel.Range['H4'] := 20;

  xExcel.Range['I4'] := 10;

  xExcel.Range['B6'].FormulaR1C1 := '=SUMPRODUCT(R2C5:R2C8,R[-2]C5:R[-2]C8)/R[-2]C9/100';
  xExcel.Range['B7'].FormulaR1C1 := '=IF(SUM(R[-3]C[3],R[-3]C[4],R[-3]C[5],R[-3]C[6])>0,SUM(R[-3]C[3],R[-3]C[4]*2,R[-3]C[5]*3,R[-3]C[6]*4)/R[-3]C[7],0)';

  xExcel.Visible := True;
end;
Başarılar.
Resim
Resim ....Resim
cmkare
Üye
Mesajlar: 177
Kayıt: 23 Ağu 2010 11:29

Re: Excele Formül yazdırma..

Mesaj gönderen cmkare »

Teşekkürler.. bunun mantığı nasıl oluyor. pek anlayamadım. onuda öğretirmisin?
xExcel.Range['B6'].FormulaR1C1 := '=SUMPRODUCT(R2C5:R2C8,R[-2]C5:R[-2]C8)/R[-2]C9/100';
xExcel.Range['B7'].FormulaR1C1 := '=IF(SUM(R[-3]C[3],R[-3]C[4],R[-3]C[5],R[-3]C[6])>0,SUM(R[-3]C[3],R[-3]C[4]*2,R[-3]C[5]*3,R[-3]C[6]*4)/R[-3]C[7],0)';

yani bu (R[-3]C[3],R[-3]C[4],R[-3]C[5],R[-3]C[6])>0

bu neye göre oluyor anlamadım.?
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Excele Formül yazdırma..

Mesaj gönderen mkysoft »

formülü yazdığınız hücreye referans alınarak formol RC standardında yazılır. R= row C =column
R[-3] = formülü girdiğim satırdan 3 satır yukarısı gibi.
cmkare
Üye
Mesajlar: 177
Kayıt: 23 Ağu 2010 11:29

Re: Excele Formül yazdırma..

Mesaj gönderen cmkare »

Çok teşekkürler.. Sorun çözüldü.
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Re: Excele Formül yazdırma..

Mesaj gönderen m_ekici »

Merhaba
Aynı sorun bende var.

Kod: Tümünü seç

 oXL.Cells[I,8] := '=eğer(G'+IntToStr(I)+'-E'+IntToStr(I)+'>$H$3;G'+IntToStr(I)+'-E'+IntToStr(I)+';"")'
veya 
 oXL.Range['H'+IntToStr(I)].FormulaR1C1 := '=EĞER(G'+IntToStr(I)+'-E'+IntToStr(I)+'>$H$3;G'+IntToStr(I)+'-E'+IntToStr(I)+';"")'

yazdığımda ole error alıyorum. =eğer( in başındaki = işaretini kaldırarak aktardığımda ve excel de = işaretini koyduğumda hata almıyorum. eğer yerine if kullandığımda da aynı hatayı veriyor. bu problemi nasıl çözdünüz.
Cevapla