excelde chart

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
skyking
Üye
Mesajlar: 136
Kayıt: 09 Kas 2005 12:52
Konum: Antalya

excelde chart

Mesaj gönderen skyking »

slm arkadaslar

excelde chart da xvalues :=VarArrayOf([a,b,...,c]);

... değişken dizi sayısı=50
bir değişkenin içinde en az 15 karekter var

10 diziyi alıyor ama 50 tanede problme yaratıyor birde

range yontemini denedim ama sayfdan değişik cells leri alıcam

yani Sayfa1!$A$3:$A$5 + Sayfa1!$A$7:$A$9 GİBİ yardımcı olurmusunuz!


kodları gonderiyorum ve kapalı olan yerdeki degerleri value sonuna eklerseniz hata vericektir:


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Excel97,comobj, OleServer;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure HandleData;
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
excel,Sheet: Variant;
implementation

{$R *.DFM}


procedure TForm1.HandleData;
var
i,k: Integer;
begin
k:=1999;

for i := 1 to 20 do
begin
Sheet.Cells[i, 1] := i;
Sheet.Cells[i, 2] :='01.01.2002 resepsiyon';
end;
end;



procedure TForm1.Button1Click(Sender: TObject);
var asheet1,range,Shts,arange,achart,series:variant;
begin

EXCEL := CREATEOLEOBJECT('EXCEL.APPLICATION');
EXCEL.Workbooks.Add[XLWBatWorksheet];
SHEET:=EXCEL.Workbooks[1].Worksheets[1];
EXCEL.visible:=true;

HandleData;



//geni,şlik //yukseklik
achart:=SHEET.chartobjects.add(100,100,850,350);
achart.chart.charttype:=51;
Shts := EXCEL.Sheets; //Sayfa1!$A$3:$J$54
// ARange := Shts.Item['Sayfa1'].Range['B1:B10;Sayfa1!A1'];
series:=achart.chart.seriescollection; // range:='sheet1!r2c3:r3c9';
Range:='Sayfa1!a1:a10';
series.add(range);


//series.NewSeries;
try
series.Item[1].Values:=VarArrayOf([0,2,3,5,7,0,0,0]);
{
1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1]);
}
series.Item[1].xValues:=VarArrayOf(['PINO BUFE','PINO HIZMET','TURKUAZ BUFE','TURKUAZ HIZMET','VERANDA BUFE','VERANDA HIZMET','EGE YEMEK','EGE HIZMET']);
{
'BONZAİ YEMEK','BONZAİ HIZMET','MANDARIN YEMEK','MANDARIN HIZMET','FANTASY YEMEK','FANTASY HIZMET','MERMAİD YEMEK',
'MERMAİD HIZMET','OILVIA YEMEK','OILVIA HIZMET','KEBAP YEMEK','KEBAP HIZMET','CACTUS YEMEK','CACTUS HIZMET','THAI NOODLE YEMEK',
'THAI NOODLE HIZMET','ALARA SNACK YEMEK','ALARA SNACK HIZMET','LA PATİSSERİE YEMEK','LA PATİSSERİE HIZMET','SAWADEE GORUNUM','SAWADEE HIZMET']);
}


except

end;

series.Item[1].HasDataLabels := true;
series.Item[1].DataLabels.Font.Bold:=false;





end;

end.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam..

- Bu akşam cevap gönderilmemiş başlıkları inceliyorum... :wink:

- Denemelerimi aşağıdaki formatta gerçekleştirdim ve sizinle aynı sonuca vardım. Maksimum karakter sayısı sınırına takılmışsınız. İsimleri kısalttığınız taktirde sorununuz kalmayacaktır.

Kod: Tümünü seç

    series.Item[1].xValues:=VarArrayOf([
              'BONZAİ YEMEK',       'BONZAİ HIZMET',
              'MANDARIN YEMEK',     'MANDARIN HIZMET',
              'FANTASY YEMEK',      'FANTASY HIZMET',
              'MERMAİD YEMEK',      'MERMAİD HIZMET',
              'OILVIA YEMEK',       'OILVIA HIZMET',
              'KEBAP YEMEK',        'KEBAP HIZMET',
              'CACTUS YEMEK',       'CACTUS HIZMET',
              'THAI NOODLE YEMEK',  'ABCDEFG'
//              'THAI NOODLE YEMEK',  'THAI NOODLE HIZMET',
//              'ALARA SNACK YEMEK',  'ALARA SNACK HIZMET',
//              'LA PATİSSERİE YEMEK','LA PATİSSERİE HIZMET',
//              'SAWADEE GORUNUM',    'SAWADEE HIZMET'
        ]);
- Yukardaki örnekte kabul edilen en fazla karakter sayısını bulmayı hedefledim. Bu hali ile Excel'e kabul edilirken, son isme bir harf dahi eklense hata dönüyor.

- Deneme için şu sıralı deneyi yapıp teyid etmek istedim.. Aşağıda göreceğin her iki sıralı da sınırda. Yani herhangi birine bir harf eklersen kabul edilmez ama bu halleriyle kabul ediliyorlar...

Kod: Tümünü seç

    series.Item[1].xValues:=VarArrayOf([
              'A123456789',
              'B123456789',
              'C123456789',
              'D123456789',
              'E123456789',
              'F123456789',
              'G123456789',
              'H123456789',
              'I123456789',
              'J123456789',
              'K123456789',
              'L123456789',
              'M123456789',
              'N123456789',
              'O123456789',
              'P123456789',
              'Q123456789',
              'R123456789',
              'S123456789',
              'T12'
        ]);

Kod: Tümünü seç

    series.Item[1].xValues:=VarArrayOf([
              'A1234',
              'B1234',
              'C1234',
              'D1234',
              'E1234',
              'F1234',
              'G1234',
              'H1234',
              'I1234',
              'J1234',
              'K1234',
              'L1234',
              'M1234',
              'N1234',
              'O1234',
              'P1234',
              'Q1234',
              'R1234',
              'S1234',
              'a1234',
              'b1234',
              'c1234',
              'd1234',
              'e1234',
              'f1234',
              'g1234',
              'h1234',
              'ı1234',
              'j1234',
              'k1234',
              'l1234',
              'm1'
        ]);
- Şimdi önerime geleyim... Bu sınırları zorlamanın en kolay yolu, Alias metodu olacaktır. Sen ismi uzun uzun başka bir Sheet'deki hücrelere yazıdır. Bu başka Sheet'in adını da Sayfa1 gibi uzun değil de S1 gibi kısa tut, Başlık olarak da şöyle tanımla...

Kod: Tümünü seç

'S2'!$A$1
S2 sayfasındaki A1 hücresindeki veri Chart'a yansıyacak ama 50 karakter bile olsa harcanan alan 9 karakter olacaktır...

- Bu sana biraz daha yer kazandıracaktır. En azından mevcut istediğin miktardaki verinin chart'a yansıtılmasına faydası olacaktır.

- Çalışmalarında başarılar...
Resim
Resim ....Resim
Cevapla