Excelde istenilen yerden bilgi alma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Gk_imptob
Üye
Mesajlar: 84
Kayıt: 01 Kas 2005 12:34

Excelde istenilen yerden bilgi alma

Mesaj gönderen Gk_imptob »

Sevgili arkadaşlar,

Forumda, excelden bilgi almayla ilgili bir çok örnek olduğunu biliyorum ama benim yapmak istediğim şey hakkında bir bilgi bulamadım.Hatta bazı örneklere bakarak aşşağıdaki kodu oluşturdum ama istediğim olmadı. Şöyleki,

Yapmak istediğim bir Excel dosyası içersindeki A12 , B12 ve D12 hücrelerinden aşşağı doğru başlayan bilgileri databasemi aktarmak.Aşşağıdaki komutla sadece bir hücreyi aktarabiliyorum onun altında devam eden bilgileri alamıyorum. Yardımlarınızı bekliyorum teşekkürler.


procedure TTechnical_PR.ExcelClick(Sender: TObject);
var
excel:variant;
begin
try
excel:=CreateOleObject('Excel.Application');
OpenDialog1.Filter:='Excel Dosyaları (*.xls)|*.xls';
except
ShowMessage('excel başlatılamıyor');
exit;
end;
ibdataset1.Insert;
excel.workbooks.Open(OpenDialog1.FileName);
IBDataSet1.FieldByName('FIYAT').Value:=excel.range['A12'];
IBDataSet1.FieldByName('ADET').Value:=excel.range['B12'];
IBDataSet1.FieldByName('TOPLAM').Value:=excel.range['D12'];
ibdataset1.Post;
excel.quit;
end;
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Excelde istenilen yerden bilgi alma

Mesaj gönderen emin_as »

For döngüsüyle halledebilirsin.

Kod: Tümünü seç

excel.workbooks.Open(OpenDialog1.FileName);
for i:=12 to 60 do
begin
  s:=IntToStr(i);
  ibdataset1.Insert;
  IBDataSet1.FieldByName('FIYAT').Value:=excel.range['A'+s];
  IBDataSet1.FieldByName('ADET').Value:=excel.range['B'+s];
  IBDataSet1.FieldByName('TOPLAM').Value:=excel.range['D'+s];
  ibdataset1.Post;
end;
Herşeyi kelimesi kelimesine siteden aramak dogru degil, eger programcılıkla ugraşıyorsanız öncellikle temel bazı ifadeleri bilmeniz gerekiyor. Genel olarak sitede excelle ilgili örnek varsa, bunu alıp programınıza uydurmanız gerekiyor. Örnegin while, repeat veya for lu kullanımları da verilmek zorunda degil.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Excelde istenilen yerden bilgi alma

Mesaj gönderen conari »

buda Döngüde son satırı bulman için fonksiyon.

Kod: Tümünü seç

function excelsonsatir(AColumn: Integer): Integer;
const
  xlUp = 3;
begin
    Result := excel.Range[Char(96 + AColumn) + IntToStr(65536)].end[xlUp].Rows.Row;
end;
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Gk_imptob
Üye
Mesajlar: 84
Kayıt: 01 Kas 2005 12:34

Re: Excelde istenilen yerden bilgi alma

Mesaj gönderen Gk_imptob »

emin_as ve conari yardımlarınızdan ve ilginizden dolayı çok teşekkür ederim.emin_as vermiş olduğu komutlarla test uygulamamda excelden istediğim yerden bilgi alabildim.Fakat daha sonra conari arkadaşımız excel son satir bulmayla ilgili bir function koymuş.

Yeni olduğumdan dolayı uygulamalarımda hiç function kullanmadım.Conari nin vermiş olduğu functionı programıma kopyaladım Procedures altında excelsonsatir diye sarı renkli bir bölüm oluştu.Programımı çalıştırdığım zaman for döngüsü içersinde bilgi olmayan hücreleride taradığı için onlarıda sıfır (0) olarak gereksiz yere getirdi. Bu function'ı butonumun içine bir yeremi yazmam gerekiyor anlıyamadım.Bu konuda da yardım ederseniz çok sevineceğim...

teşekkürler.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Excelde istenilen yerden bilgi alma

Mesaj gönderen conari »

fonksiyonu kendi başına kod bloguna kopyala.

Kod: Tümünü seç

for i:=12 to 60 do
kısmını

Kod: Tümünü seç

for i:=12 to excelsonsatir(1) do
olarak değiştir.

excelsonsatir(1) 1, A sütununu temsil eder. 12. satırdan başlayıp A sütünundaki son satıra kadar dön olarak döngünü düzenlemiş olursunuz.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Gk_imptob
Üye
Mesajlar: 84
Kayıt: 01 Kas 2005 12:34

Re: Excelde istenilen yerden bilgi alma

Mesaj gönderen Gk_imptob »

sevgili conari cevabınız için çok teşekkürler.Dediğiniz gibi yaptım fakat aşşağıdaki hatayı alıyorum nedendir anlayamadım.

Debegguer Exception Notification
Project Test.exe raised exception class EVariantInvalidOpError with message 'Invalid variant operation'.Process stopped.

OK dediğim zaman excelsonnsatır kodundaki Result:=excel.range[Char(96 +AColumn) + .... başlayan komut satırında hata veriyor.

Ben function komutunu direk kopyala yapıştır yaptım tekrar tekrar kontrol ediyorum yazım hatasıda yok.Sizce neden hata alıyorumdur ?

Teşekkürler.
faserka
Üye
Mesajlar: 14
Kayıt: 13 Ağu 2004 04:00

Re: Excelde istenilen yerden bilgi alma

Mesaj gönderen faserka »

Merhaba
for döngüsünde örneğin A sütununda aşağı doğru tararken hücre değerinin boş olup olmadığını test edip döngüyü sonlandırabilirsin. Böylece tüm tabloyu taratmış olmazsın
Kolay Gelsin.
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Excelde istenilen yerden bilgi alma

Mesaj gönderen emin_as »

Kod: Tümünü seç

uses 
  ...  variants;
var
  fiyat : variant;
............
excel.workbooks.Open(OpenDialog1.FileName);
for i:=12 to 60 do
begin
  s:=IntToStr(i);
  fiyat:=excel.range['A'^+s];
  if varisnull(fiyat) or varisempty(fiyat) then  break; /// fiyat bilgisi yok,  o zaman döngüden çıkılacak

  ibdataset1.Insert;
  IBDataSet1.FieldByName('FIYAT').Value:=excel.range['A'+s];
  IBDataSet1.FieldByName('ADET').Value:=excel.range['B'+s];
  IBDataSet1.FieldByName('TOPLAM').Value:=excel.range['D'+s];
  ibdataset1.Post;
end;
For döngüsünde kontrol yapabilirsin, empty veya null bir fiyat alanı görünce döngüden çıkarsın.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Excelde istenilen yerden bilgi alma

Mesaj gönderen conari »

kodlama için bir şey diyemeyeceğim.

Kod: Tümünü seç

for i:=12 to excel.Range[Char(96 + 1) + IntToStr(65536)].end[3].Rows.Row do
Kullanarak; 96+1 ==> 1 i değişken olarak verebilirsin.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Gk_imptob
Üye
Mesajlar: 84
Kayıt: 01 Kas 2005 12:34

Re: Excelde istenilen yerden bilgi alma

Mesaj gönderen Gk_imptob »

arkadaşalar bu konuda çok fazla vaktinizi aldığımı biliyorum kusura bakmayın.emin_as arkadaşımızın verdiği kodları programa uyguladığım zaman "for 1 to 12" dediğim zaman ilk 5 hücrede bilgi varsa onları aynen alıyor daha sonra 6nci hücreden 12nci hücreye kadar tarama yapıp boş hücrelerde bilgi olmadığından kesmesi gerekirken kesmeyip DB'ye sıfır değeri ekliyor.Yani DB'me yine 12 adet kayıt ekliyor ilk 5 hücrede benim kayıtlarım 6ncı hücreden sonraki kayıtların değerı sıfır. Conari arkadaşımızın verdiği komutuda yaptığım zaman yukarıda invalid variant hatası almaya devam ediyorum.

Teşekkürler.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Excelde istenilen yerden bilgi alma

Mesaj gönderen conari »

Kod: Tümünü seç

excel.workbooks.Open(OpenDialog1.FileName);
for i:=1 to excel.Range[Char(96 + 1) + IntToStr(65536)].end[3].Rows.Row do //1.satırdan son dolu olan satıra kadar dön.
begin
  s:=IntToStr(i);
  ibdataset1.Insert;
  IBDataSet1.FieldByName('FIYAT').Value:=excel.range['A'+s];
  IBDataSet1.FieldByName('ADET').Value:=excel.range['B'+s];
  IBDataSet1.FieldByName('TOPLAM').Value:=excel.range['D'+s];
  ibdataset1.Post;
end;
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Gk_imptob
Üye
Mesajlar: 84
Kayıt: 01 Kas 2005 12:34

Re: Excelde istenilen yerden bilgi alma

Mesaj gönderen Gk_imptob »

sevgili conari son verdiğin komutu kendi programımda tekrar gözden geçirdim ve bir yerde hata yaptığımı farkettim :( Verdiğin komutu çalıştırabildim.Fakat bu komut tüm sayfayı tarıyor anladığım kadar.Ben örneğin sadece 1'den 12nci satır arasındaki bilgileri almak istiyorum.Fakat burda illaki 1'den 12 nci hücreye kadar bilgi olucak diye birşey yok.Yani 1nci satırdan 3ncü satırada bilgi girilebilir yada 1nci satırdan 10ncu satırada bilgi girilebilir. bu ayrımı nasıl yapabiliriz.

Saygılarımla..
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Excelde istenilen yerden bilgi alma

Mesaj gönderen conari »

Hücre boşmu kontrol ettir. veri string değişken.

Kod: Tümünü seç

excel.workbooks.Open(OpenDialog1.FileName);
for i:=1 to excel.Range[Char(96 + 1) + IntToStr(65536)].end[3].Rows.Row do //1.satırdan son dolu olan satıra kadar dön.
begin
s:=IntToStr(i);
veri:=excel.range['A'+s];
if veri<>''  then begin
  IBdataset1.Insert;
  IBDataSet1.FieldByName('FIYAT').Value:=excel.range['A'+s];
  IBDataSet1.FieldByName('ADET').Value:=excel.range['B'+s];
  IBDataSet1.FieldByName('TOPLAM').Value:=excel.range['D'+s];
  IBdataset1.Post;
next; 
end else 
next;
end;
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Gk_imptob
Üye
Mesajlar: 84
Kayıt: 01 Kas 2005 12:34

Re: Excelde istenilen yerden bilgi alma

Mesaj gönderen Gk_imptob »

sevgili conari vermiş olduğun kodda ufak bir değişiklik yaparak "for i:=1 to 12 do" exceldeki istediğim bilgileri gönül ratahlığıyla DB ye alabiliyorum. :bravo: Yardımlarından dolayı sana, emin_as ve diğer arkadaşlara çok teşekkür ederim.

saygılarımla....
Cevapla