excele veri aktarımı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
meguntr
Üye
Mesajlar: 78
Kayıt: 23 Eki 2003 02:09

Mesaj gönderen meguntr »

unforgiven dosyanın salt okunur açmasının bir nedenide

IExcel.WorkBooks.Open(
Dosya,EmptyParam,False,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0);

burda 3. variant daki False değerine dikkat et, bu kısım dosyanın ReadOnly Özelliğini içerir ..kayıt değiştirmek için False yapabilirsin,

kolay gelsin
unforgiven
Üye
Mesajlar: 75
Kayıt: 19 Eyl 2003 09:50
Konum: ANKARA

Mesaj gönderen unforgiven »

tesekurler...
Kullanıcı avatarı
r_korkmaz44
Üye
Mesajlar: 63
Kayıt: 11 Ara 2005 01:00

biraz yardım

Mesaj gönderen r_korkmaz44 »

Ben delphi de yeni sayılabilecek biriyim ama inat ettim bu işii ilk önce Allah sonra siz ağabeylerim sayesinde öğreneceğim. Bir takip programı yapmaya çalışıyorum. Sorunum şu:

Aşağıdaki sizin yazdığınız kodların yardımıyla excel sayfasına bilgi aktarabiliyorum. Ben istiyorum ki önceden formatını hazırladığım bir excel sayfasının içerisine verileri göndereyim. Örneğin bir dilekçe olacak ve isimleri seçtiğim zaman direk gerekli bilgiler excelin içerisine yerleşsin.Aradaki yazılar dediğim gibi önceden hazır olacak.Sadece veriler yerleşecek.Onun için hazırladığım sayfayı nasıl açacam ve bu sayfanın içindeki yerlere verileri nasıl yerleştirecem.Ayrıca eğer kullanağım başka elemanlar var ise onlar nelerdir?Nasıl kullanmalıyım?Şimdiden teşşekür eder çalışmalarınızda başarılar dilerim.


uses comobj;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
EXCEL, WORKBOOK, SHEET:VARIANT;
begin

EXCEL := CREATEOLEOBJECT('EXCEL.APPLICATION');{EXCEL 'İ AÇMA}
EXCEL.VISIBLE :=TRUE;{EXCEL 'İ AKTİF YAPMA}
WORKBOOK :=EXCEL.WORKBOOKS.ADD;{KİTAP EKLEME}

SHEET:=WORKBOOK.WORKSHEETS[1];{SAYFA NUMARASI}
SHEET.CELLS[1,1]:= 'DENEME METİN'; {SATIR,SÜTUN} //Buradan Satır ve Sütunlara erişebilirsin.

SHEET.CELLS[1,1].Font.Color := $00E88017;
SHEET.CELLS[1,1].Font.Bold := True;
SHEET.CELLS[1,1].Font.italic := True;
SHEET.CELLS[1,1].Font.Underline := true;
SHEET.CELLS[1,1].Font.Size := 20;
SHEET.CELLS[1,1].Characters(3, 1).Font.Bold := True; {HÜCRE İÇİNDE BİR ARALIKDAKİ METNE HİTAP ETME}

SHEET.RANGE['A1:A10'].Borders.Color := $00E88017; {aralıktaki bütün hücrelerin dört kenarını renklendirir}
SHEET.CELLS[1,10].Borders.LineStyle := xlContinuous; {BİR HÜCREYE HİTAP ETME}
SHEET.RANGE['A1:A10'].Borders.LineStyle := xlContinuous;{BELİRLİ BİR ARALIĞA HİTAP ETME}
{XlLineStyle -> xlContinuous, xlDash, xlDashDot, xlDashDotDot, xlDot, xlDouble, xlSlantDashDot, or xlLineStyleNone.}


{BİR HÜCRENİN HERHANGİ BİR KENARLIĞININ RENGİNİ BELİRLEME}
{Tipler: xlInsideHorizontal, xlInsideVertical, xlDiagonalDown, xlDiagonalUp, xlEdgeBottom, xlEdgeLeft, xlEdgeRight, or xlEdgeTop.}
SHEET.RANGE['B1:F2'].Borders(xlEdgeTop).Color := 00E88017;

{istenilen yern sütun rengini belirleme}
SHEET.RANGE['B1:F2'].Interior.Color := 00E88017;
SHEET.RANGE['B1:F2'].Interior.ColorIndex := 1; {ColorIndex index kulalnınca her rengin bir kodu var kökde bunları yazmım}

SHEET.Range['A1:H8'].Formula := '=rand()';

SHEET.Range('A1').ClearContents; {İSTENİLEN HÜCRELERİ TEMİZLEME}

{SATIR SÜTUN LARA HİTAP ETME}
SHEET.Range['A1'].Columns.ColumnWidth := 20;{sadece belirtilen hücreyi}
SHEET.Range['A1'].Rows.RowHeight := 20;

SHEET.Columns.ColumnWidth := 25; {tüm sayfada etkili}
SHEET.Rows.RowHeight := 25;

SHEET.Columns(1).Font.Bold := True;
SHEET.Rows(1).Font.Bold := True;

SHEET.Columns(1).Delete;
SHEET.Rows(3).Delete;
end;
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

zaten alıntı yapmış olduğunuz mesajda sorunuzun cevabı var


SHEET.CELLS[1,1]:= 'DENEME METİN'; {SATIR,SÜTUN} //Buradan Satır ve Sütunlara erişebilirsin.

kolay gelsin...

iyi bayramlar...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
r_korkmaz44
Üye
Mesajlar: 63
Kayıt: 11 Ara 2005 01:00

Mesaj gönderen r_korkmaz44 »

Ağabey herhalde yanlış anlattım. Ben vermiş olduğunuz kod sayesinde exceli açtırarak satır ve sütunlara zaten yazıyorum . Benim demek istediğim örneğin bir excel sayfasının tablosunu felan herşeyini ayarlayarak hazırladım. Yani çizgiler felan grafik herşeyi excelde yaptım.Bunu da D sürücüsüne kaydettim. Şimdi bu önceden hazırladığım excel sayfasını çağırarak bazı işlemler yapmak istiyorum.Ben bazı bölümlere veritabanındaki isimleri yazdıracam. Örneğin adamın adını, soyadını, işini, memleketini felan veritabanından alıp yazdıracak. Ben D sürücüsündeki excel sayfasını çağıramıyorum ve üzerine veritabanındaki isimleri yazdıramıyorum. Sorunum bu. Yoksa verdiğiniz kodla güzel şeyler yapıyorum.Belki diyebilirsiniz Aynı işlemi buradan da yapabilirsin diyebilirsin. Ağabey böyle olursa çok zorlanıyorum. Ve istediğim elemanları yerine tam manasıyla koyamıyorum. Şimdiden teşekkürler.. Allah yar ve yardımcınız olsun. En kısa zamanda yazarsanız sevinirim. Bir ağabeyim form sayfasını biraz gezdim baktım hayli bilgilisiniz. Sadece bu excel de değilde diğer konularda da yardımcı olursanız sevinirim. Önceden demiştim bir projeyle uğraşıyorum. Eksikliklerim çok fazla ve yeterli kaynağa da sahip değilim. Eski bir Delphi 6 kitabına sahibim. O yüzden çok eksiğim var. Sizi belki sık sık rahatsız edebilirim. Kusuruma şimdiden bakmayın. Gerçekten Allah biliyor bu soruların cevabını bile alırken çok utanıyorum. Niye ben de çalışmıyprum, niye yapamıyorum diye çok hayıflanıyorum. Biz hep vermeye alışık oldıuğumuzdan bir şeyleri isterken inanın bana çok sıkılıyorum. Neyse herhalde lafı çok uzattım. Tekrar Allah yardımcınız olsun.......
Kullanıcı avatarı
mucar
Kıdemli Üye
Mesajlar: 247
Kayıt: 17 May 2005 01:14

Mesaj gönderen mucar »

Merhaba,

Yeniyim diyorsunuz, o halde bu component işinizi kolayca yapmanız için size çok faydalı olur. Kurulumu, kullanımı ile ilgili geniş açıklamalar sitesinde mevcut. Download kısmından indirip, kurup bir deneyin. Ticari yazılım yapmıyorsanız kullanımı ücretsiz. Adresi aşağıda:

http://www.vector-ski.com/reports/arexc ... _index.htm

Kolay gelsin.
"Evine bakmaktan aciz olan; ilerici, üç kıtaya hükmeden ecdadın mı gerici?"
Kullanıcı avatarı
r_korkmaz44
Üye
Mesajlar: 63
Kayıt: 11 Ara 2005 01:00

Mesaj gönderen r_korkmaz44 »

Abilerim sizlere çok kırgınım. Bir şeyi bilmemek ayıp değil değilmi. Belki bazı konularda sizleden çok ama çok iyi olabilirim. (Mesleğim gereği). Sadece dedimki delphiye biraz değil çok yabancıyım dedim. Ama bir soru için bir sürü laf ettik. Hıı sizin dediğiniz gibi de araştır gel demekte iyi değil. Güzel ama adamın elinde kaynağı yoksa ve sizin gibi büyük şehirde yaşamayıp sadece belli zamanlarda internet yoluyla yardım almaya çalışıyorsa bu da ayıp olmasa gerek. Bu konu ve diğer konularda hep yarım cümleler kurarak cevap verilmekte. Anladığım kadarıyla bu gururdan kibirden öte araştırıp öğrenmekle alakalı olsa gerek. Ama dediğim gibi kısıtlı imkanlarla bu yazılıyorsa bizlere de hak verin. Belki Delphiyi sizler kadar bilmeye biliriz. Yinede sağolun. Teşekkür eder saygılar sunarım...........
AllaH'ıma emanet olun....
Kullanıcı avatarı
r_korkmaz44
Üye
Mesajlar: 63
Kayıt: 11 Ara 2005 01:00

Mesaj gönderen r_korkmaz44 »

Yinede abime yazmıştım ne oldu ki böyle oldu diyebilisiniz. Bir daha yazayım. D:\delphi\proje\veli.xls diye bir excel dosyamı ben kendim hazırladım. Yani herşeyiyle. Yani ytablosundan tut klavuz çizgilerini kaldırma, font ve bgcolor renklerini değiştirmeye kadar ben önceden hazırladım diyelim. Sonra bunu çağırıp belli yerlere( örneğin c1 hücresine Adı d1 hücresine soyadı, a10 hücresine okulno yu veritabanından alarak yazdım.) ben veritabanından yani c1,d1 ve A10 hücrelerine veri aktarıyorum dedim zaten verdiğiniz kodla. Ben bu önceden hazırladığım dosyayı nasıl çağıracam ve bu bilgiileri nasıl kaydettirecem(kodlar yardımıyla bunu yapıyorum). Buna yardım ederseniz sevinirim demiştim.
Kullanıcı avatarı
r_korkmaz44
Üye
Mesajlar: 63
Kayıt: 11 Ara 2005 01:00

Mesaj gönderen r_korkmaz44 »

Ağabeylerim hala cevap alamadım. Yardım edin lütfen saygılar....
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
kitap eklemek yerine var olan bir kitabı açacaksın...

Kod: Tümünü seç

var
EXCEL, WORKBOOK, SHEET:VARIANT;
begin

EXCEL := CREATEOLEOBJECT('EXCEL.APPLICATION');{EXCEL 'İ AÇMA}
EXCEL.VISIBLE :=TRUE;{EXCEL 'İ AKTİF YAPMA}
WORKBOOK :=EXCEL.WORKBOOKS.open('c:\kitap1.xls');{KİTAP EKLEME yerine kitap açacaksın}
.....................
bişey söyleyimmi..
daha önce hiç oleobj oluşturmadım bunun için herhangi bir kaynağı araştırmadım.
senin gönderdiğin kodlara baktım...........

Kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
r_korkmaz44
Üye
Mesajlar: 63
Kayıt: 11 Ara 2005 01:00

Mesaj gönderen r_korkmaz44 »

Ağabey Allah razı olsun. Çok teşekkürler..
Kullanıcı avatarı
r_korkmaz44
Üye
Mesajlar: 63
Kayıt: 11 Ara 2005 01:00

Mesaj gönderen r_korkmaz44 »

Ağabeylerim sorunum şu:Ben aynı sayfaya veritabanından aldığım 5 kişinin bilgilerini kaydettirecem. Yani for döngüsü gibi bir döngü kullanmam lazım. Aşağıdaki örnektede görüldüğü gibi mesala şu şekilde olsun:

Birinci kişinin kaydını B20 hücresine . İkinci kişinin kaydını B40 hücresine , üçüncü kişiyi B60 hücresine kaydetme şeklinde olacak.Tabi bu B20 içindi. Aşağıda kullandığım(B16,B17,D17....) hücreleride bu şekilde kaydetmek istiyorum. Şimdiden teşekkürler. Çalışmalarınızda başarılar.Allah yar ve yardımcınız olsun.SAYGILAR.


procedure TForm8.Button1Click(Sender: TObject);
var s:boolean;
s1:string;

EXCEL, WORKBOOK, SHEET:VARIANT;
begin




begin
edit1.setfocus;
table1.indexname:='OKULNO';
edit1.setfocus;
if edit1.modified then
begin
s:=table1.findkey([edit1.text]);
if s=true then
begin
edit1.text:='';



edit2.text:=table1okulno.text;
memo1.text:=table1adresi.Text;
edit4.text:=table1adi.text;
edit5.text:=table1soyadi.Text;
edit6.text:=table1sinifi.text;

edit8.text:=table1psirano.text;
edit9.text:=table1evtel.text;
edit7.text:=table1okulno.text;
edit10.text:=table1velisi.text;




end
else begin
application.messagebox('Aradığınız Kayıt Bulunamadı,Tekrar Deneyin','Mesaj');
table1.indexname:='';
end;
end
else
application.messagebox('Okul Numarasını Girmediniz,Tekrar Deneyin','Mesaj');
end;





EXCEL := CREATEOLEOBJECT('EXCEL.APPLICATION');{EXCEL 'İ AÇMA}
EXCEL.VISIBLE :=TRUE;{EXCEL 'İ AKTİF YAPMA}
WORKBOOK :=EXCEL.WORKBOOKS.open('D:\PROJE TASLAK\veli.xls');

SHEET:=WORKBOOK.WORKSHEETS[1];{SAYFA NUMARASI}


SHEET.RANGE['b9']:=memo1.Text;
SHEET.RANGE['b16']:=edit4.Text;
SHEET.RANGE['d16']:=edit5.Text;
SHEET.RANGE['b17']:=edit6.Text;
SHEET.RANGE['d17']:=edit2.Text;
SHEET.RANGE['b18']:=edit2.Text;
SHEET.RANGE['b19']:=edit8.Text;
SHEET.RANGE['b20']:=edit9.Text;
SHEET.RANGE['j9']:=edit2.Text;
SHEET.RANGE['j12']:=edit10.Text;

if RadioButton1.Checked then

begin
Table1.filtered:= true;

SHEET.RANGE['d20'].Interior.Color := 00E88017;
end;
if RadioButton2.Checked then

begin
Table1.filtered:= true;
SHEET.RANGE['a20'].Interior.Color := 00E88017;

end;

end;


Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

merhaba,

seni yanıltmak istemem yazılanları okudum ve aklıma fikir olarak geldi. @rsimsek ustam yine programlama forumunda arkadaşımızın birine şu öneriyi verdi

Kod: Tümünü seç

Tablo1.First; 
  Image1.Picture.Assign(Table1.FieldByName('RESIM') as TBlobField); 
  Tablo1.Next; 
  Image2.Picture.Assign(Table1.FieldByName('RESIM') as TBlobField); 
  Tablo1.Next; 
  Image3.Picture.Assign(Table1.FieldByName('RESIM') as TBlobField); 
  Tablo1.Next; 
  Image4.Picture.Assign(Table1.FieldByName('RESIM') as TBlobField); 
  Tablo1.Next; 
  Image5.Picture.Assign(Table1.FieldByName('RESIM') as TBlobField); 
  Tablo1.Next; 
  Image6.Picture.Assign(Table1.FieldByName('RESIM') as TBlobField); 
burada açılışta resimleri tek tek gösterme işlemi yapılıyor. her gösterimden sonra tablo next yapılıyor ve sıra ile gösteriyor resimleri.

sizde excele veriyi aktarırken while not eof ile veriyi ibquery veya ibtable ile çekerken excel deki istediğiniz alana birinci veriyi attıktan sonra next diyebilir sonra diğer alan için bu işlemi tekrarlayabilirsiniz.

ben mantık olarak düşündüm. tekrar söylüyorum sizi yanıltmak istemem önerdiğim işlemi denemedimde.

benimkisi lafazanlık işte :oops:

kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
Kullanıcı avatarı
ahmethakan
Üye
Mesajlar: 30
Kayıt: 03 Eki 2005 05:26
Konum: istanbul

Bu çözümdür...

Mesaj gönderen ahmethakan »

aşagıdaki kodun çalışabilmesi için
dbgridin olduğu yere 1 adet server sekmesinden
ExcelApplication1NewWorkbook sürükle ve bırak
dm.ADOOgrNufBil <---- kendi AdoDaset'ini yaz sorunsuz olarak verileri excelle atarsın...

Kod: Tümünü seç

procedure TForm1.BitBtn6Click(Sender: TObject);
var
aralik:ExcelRange;
i,satir:integer;
Bookmark:TbookmarkStr;
begin
   //excel uygulamsı oluştur.
        ExcelApplication1.Visible[0]:=true;
        ExcelApplication1.Workbooks.Add(Null,0);
   //hüçreleri doldur
        aralik:=ExcelApplication1.ActiveCell;
        for i:= 0 to dm.ADOOgrNufBil.Fields.Count -1 do
        begin
                aralik.Value2:=dm.ADOOgrNufBil.Fields[i].DisplayLabel;
                aralik:=aralik.Next;
                end;
   //alanları satırlara ekle
           try
           Bookmark:=dm.ADOOgrNufBil.Bookmark;
           try
                dm.ADOOgrNufBil.First;
                satir:=2; //2. satırdan itibaren
                while not dm.ADOOgrNufBil.Eof do begin
                aralik:=ExcelApplication1.Range['A'+IntToStr(satir),'A'+IntToStr(satir)];
                for i:=0 to dm.ADOOgrNufBil.Fields.Count-1 do
                begin
                aralik.Value2:=dm.ADOOgrNufBil.Fields[i].AsString;
                aralik:=aralik.Next;
                end;
           dm.ADOOgrNufBil.Next;
           Inc (satir);
           Refresh;
           end;
                Finally
                dm.ADOOgrNufBil.Bookmark:=Bookmark;
                end;
                finally
               begin
            // if not VarIsEmpty(Excel)then excel.quit;
               end;
    end;
end;
Kullanıcı avatarı
r_korkmaz44
Üye
Mesajlar: 63
Kayıt: 11 Ara 2005 01:00

Mesaj gönderen r_korkmaz44 »

Ağabeyler excele şu şekilde bilgi aktarımı yapsak nasıl olur?

DBase for Windows kullanıyorum. Edit1.Text 'e yazdığım okulno yu yanda bulunan Listbox'a aktarıyorum. Ben Listboxtaki okulno larını Excel'e aktarıyorum. Şöyle iyice açıklıyayım. Örnek Okulno=1,2,23,45,56,85 olsun. Bu 6 okulno tabiki ayrı ayrı kişilere ait. Yani Okulno=1 ise Adı=Hasan, Soyadı=KARA....... gibi bilgileride yazıyor. Bu 6 numaranın ayrı ayrı tüm bilgilerini excele aktarmak istiyorum.

Okulno=1 ise;
Adı= B1 hücresine
Soyadı= B2 hücresine
....................
..........


Okulno=2 ise;
Adı= B11 hücresine
Soyadı= B12 hücresine
..........................
........................


Okulno=23 ise;
Adı= B21 hücresine
Soyadı= B22 hücresine
.....................
...................


bu şekilde excele aktaracam.Şİmdi ben edit1.text'e düşünün ki 200 numarayı girdik. Yani okulno önemli değil.Ben listbox a girdiğim okulnumarası veritabanında var ise o şekilde 200 numaralı öğrencinin tüm bilgilerini bu şekilde girsin.

Bu veritabanında listboxtaki okulno ya göre arattıracak bulacağım numarayı sıralı olarak nasıl alabilirim?Yani 1 numaralıyı 100 numaralı olanı nasıl yazdıracam(Numarayı bilmeden,,,,sadece veritabanında var ise olacak)


Listbox1.itemindex i nasıl kullanacam...


Biraz karışık oldu farkındayım .Anlatmak istediğim Bu listboxtaki numaraları bulup ta excele sıralı olarak(D1,D11,D22...) nasıl yazdıracam.. Şimdiden teşekkürler...
Cevapla