Excele Formül yazdırma..
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Excele Formül yazdırma..
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?
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?
Re: Excele Formül yazdırma..
Kod: Tümünü seç
v.ActiveSheet.Cells[i,11].Formula:= ’=E2+F2+G2+H2’;
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;
Re: Excele Formül yazdırma..
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..
Re: Excele Formül yazdırma..
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
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
Re: Excele Formül yazdırma..
Alanın String, integer olduğundanmı kaynaklanıyor.
Re: Excele Formül yazdırma..
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)';
Bir kelimenin anlamını öğretsen bile yeter..
Re: Excele Formül yazdırma..
F+inttostr(i)*2+...
*2, *3, *4 tırnak yada çarpı hataları var. Gyi tanımıyor.
*2, *3, *4 tırnak yada çarpı hataları var. Gyi tanımıyor.
Re: Excele Formül yazdırma..
Konu güncel... çözülemedi sorun..
Re: Excele Formül yazdırma..
Yokmu şimdi bu konuyla bir bilgisi olan?
Re: Excele Formül yazdırma..
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.
Bunu biz programımıza uyguladığımızda da şöyle oluyor...
Başarılar.
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;
Re: Excele Formül yazdırma..
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.?
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.?
Re: Excele Formül yazdırma..
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.
R[-3] = formülü girdiğim satırdan 3 satır yukarısı gibi.
Re: Excele Formül yazdırma..
Çok teşekkürler.. Sorun çözüldü.
Re: Excele Formül yazdırma..
Merhaba
Aynı sorun bende var.
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.
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.