Excelden veri alma hakkında (excel import)

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Excelden veri alma hakkında (excel import)

Mesaj gönderen greenegitim »

Merhaba,
Excelden veri alırken
1) xlsx 2007 ve sonrası dosyalarından veri alabiliyormuz
2) herhangi bir max kayıt sayısı varmı exceldeki tüm kayıtları alabiliyormuyuz.
3) excelden veri alırken seçtiğimiz excel dosyasındaki en son kayıt kaçıncı kayıt döngüyü ona göre nasıl yapıyoruz.
Mücadele güzelleştirir!
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Excelden veri alma hakkında (excel import)

Mesaj gönderen Lord_Ares »

merhaba,
1-)Bildiğim kadarıyla versiyon farketmiyor, tümünden alabiliyoruz.
2-)Evet, tümünü alabilirsin.
3-) Ekte sana küçük bir örnek hazırladım incelersen kodların içinde açıklamada yazdım. delphi ile açmış olduğun excelin neresinde bilgi olduğunu variant tipinde bir değişkene şöyle alabilirsin. (BILGINERDE,EXCELDOSYASI:variant;
NOT: EKTE GÖNDERDİĞİM ÖRNEĞİ İLK AÇTIĞINDA TABLE1.DATABASENAME KISMINI KENDİNE GÖRE DÜZENLE YOKSA AÇILIŞTA HATA ALABİLİRSİN

BILGINERDE:=EXCELDOSYASI.ActiveWorkbook.worksheets[1].UsedRange;

EKTE GÖNDERMİŞ OLDUĞUM ÖRNEĞİN KODLARI ( FORMUNUZUN USES SATIRINA ComObj TANIMLAMAYI UNUTMAYIN)

//FORMUNUZDAKI implementation KISMININ HEMEN USTUNDEKİ VAR BLOĞUNA DEĞİŞKENLERİMİZİ TANIMLIYORUZ

Kod: Tümünü seç

var
  EXCELDOSYASI: Variant;               /// EXCEL DOSYASI İLE İŞLEM YAPMAK İÇİN TANIMLANIYOR
  KACSATIR,KACSUTUN:integer; /// EXCELDEBİLGİSAYISI ADLI PROCEDUR KAÇ SATIR BİLGİ OLDUĞUNU BU DEĞİŞKENLERE GÖNDERECEK
implementation  

EXCELDE KAÇ SATIR VE SUTUN BİLGİ OLDUĞUNU BULAN PROCEDURUMUZU FORMUNUZDAKİ implementation SONRAKİ KISIMDA OLUŞTURUYORUZ

Kod: Tümünü seç

procedure exceldebilgisayisi;
var
hangisatirdaverivar:variant;
begin
try
KACSATIR:=0; // BU DEĞİŞKENLERDEKİ DEĞERLERİ SIFIRLAYALIM Kİ TEKRAR ÇAĞIRILDIĞINDA ÜZERİNE EKLESİN
KACSUTUN:=0; // BU DEĞİŞKENLERDEKİ DEĞERLERİ SIFIRLAYALIM Kİ TEKRAR ÇAĞIRILDIĞINDA ÜZERİNE EKLESİN
hangisatirdaverivar:= EXCELDOSYASI.ActiveWorkbook.worksheets[1].UsedRange; // veri çalışma kitabı 1 deki hangi satırlarda ve sütünlarda var buluyor
           KACSATIR:= hangisatirdaverivar.rows.Count; /// kaç satır bilgi olduğunu rakamsal olarak buluyor.
           KACSUTUN:= hangisatirdaverivar.columns.Count; // kaç kolonda bilgi olduğunu rakamsal olarak buluyor.
except
end;
end;
ŞİMDİDE EXCELI AÇIP İÇİNDEKİ BİLGİLERİ DATAMIZA KAYDEDEN KODU YAZALIM

Kod: Tümünü seç


procedure TForm1.Button3Click(Sender: TObject);
 VAR
 EXCELDEKISATIR,EXCELDEKISUTUN:Integer;
 SAYFA: Variant;
BEGIN

       IF OpenDialog1.Execute THEN BEGIN
        EXCELDOSYASI:=CreateOleObject('excel.application');
        EXCELDOSYASI.Visible:=false;
          TRY
          EXCELDOSYASI.workbooks.open[OpenDialog1.FileName];
          exceldebilgisayisi;
          FOR EXCELDEKISATIR:=1 to KACSATIR DO BEGIN
           Table1.Append;
           Table1BARKODNO.AsString:= (exceldosyasi.ActiveSheet.Cells[EXCELDEKISATIR,1].Value);
           Table1URUNADI.AsString:= (exceldosyasi.ActiveSheet.Cells[EXCELDEKISATIR,2].Value);
           Table1.Refresh;
           END;

    FINALLY

     IF NOT VarIsEmpty(EXCELDOSYASI) THEN
     BEGIN
        EXCELDOSYASI.DisplayAlerts := False;
        EXCELDOSYASI.Quit;
        EXCELDOSYASI := Unassigned;
     END;
   END;
   ShowMessage('AKTARMA İŞLEMİ TAMAMLANDI.');
   END;
END;

Dosya ekleri
excell.rar
EXCELDEN BİLGİ ALMA
(14.41 KiB) 915 kere indirildi
tsnuman
Üye
Mesajlar: 1
Kayıt: 14 Mar 2018 02:29

Re: Excelden veri alma hakkında (excel import)

Mesaj gönderen tsnuman »

bu kodu delphi kaçta kullanabilirim
VCLcan
Üye
Mesajlar: 15
Kayıt: 09 Şub 2017 12:27

Re: Excelden veri alma hakkında (excel import)

Mesaj gönderen VCLcan »

Ben bu kodu çalışmalarımda kullanıyorum.
Şu ana kadar hepsinde çalıştı.
En son xe5 te kullandım. sorun yok.
Çok temiz bir kod.
akuyumcu63
Üye
Mesajlar: 386
Kayıt: 02 Tem 2007 09:43

Re: Excelden veri alma hakkında (excel import)

Mesaj gönderen akuyumcu63 »

merhaba;
yukarıdaki kodu excelden veri aktarırken kullanıyorum güzel çalışıyor. ancak bazı excel dosyalarında şu sorunla karşılaşıyorum. excel dosyasında 30 kayıt olduğunu varsayalım kayıtları aktarınca 80 kayıt geliyor 30 dan sonrası boş kayıt olarak geliyor. bunu nasıl engelleyebilirim.
İsteyen, yapabildiğinden daha fazlasını yapar.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Excelden veri alma hakkında (excel import)

Mesaj gönderen ertank »

Örnek okuma kodunuzu paylaşabilir misiniz? Eğer örnek kodu aynen kullanıyor iseniz aşağıdaki kontrolü yaparak boş olmaması gereken hücreler dolu ise veri okuması yapmanızda fayda var:

Kod: Tümünü seç

if not VarIsNull(exceldosyasi.ActiveSheet.Cells[EXCELDEKISATIR,1].Value) then
begin
  // aktarma yapılsın
end;
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Excelden veri alma hakkında (excel import)

Mesaj gönderen Lord_Ares »

Kullandığınız excel dosyasını paylaşırsanız birde biz inceleyip hatayı bulmaya çalışalım. Bu kodu olduğu gibi kullandıysanız hata oluşmaması gerekli. Gözden kaçırdığınız birşey olmalı (örneğin boş görünen fakat başka yerden veri çeken excel hücreleri gibi..)
Kullanıcı avatarı
mymenis
Üye
Mesajlar: 16
Kayıt: 05 Oca 2005 04:37
İletişim:

Re: Excelden veri alma hakkında (excel import)

Mesaj gönderen mymenis »

Excel'den verileri alabiliyorum teşekkür ederim. Ancak excelde ondalıklı değerleri aktardığımda örneğin 3,2 değerini 320 şeklinde alıyor. Nerede hata yapıyorum. (Accsess veri tabanı sütun alanı ondalıklı alan olarak seçilmiş)
Hayallerinin Ulaştığı Yere...
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Excelden veri alma hakkında (excel import)

Mesaj gönderen Lord_Ares »

Excelden değer alırken nasıl aldığınızı bilmiyorum ama ,
1) Value diyerek alıp almadığınızı kontrol edin. Value yerine integer demiş olabilirsiniz.
(exceldosyasi.ActiveSheet.Cells[EXCELDEKISATIR,1].Value) şeklinde mi aldınz kontrol edin

2) Exceldeki hücrenin özelliklerinden tipini kontrol edin . Düz metin , sayı hangisi aktif. Eğer hücre için metin seçiliyse siz bilgiyi çekerken string çekiyor olabilirsiniz. Ayrıca unutmadan aynı bölümdeki ondalık ayracı bölümünüde kontrol etmeyi unutmayın. Aksi taktirde aldığınız rakamların, yukarı yuvarlama sebebi ile farklılık gösterebilir.
Kullanıcı avatarı
mymenis
Üye
Mesajlar: 16
Kayıt: 05 Oca 2005 04:37
İletişim:

Re: Excelden veri alma hakkında (excel import)

Mesaj gönderen mymenis »

Değerleri value olarak aldım. Excel de Hücre değeri sayı tipindeydi.
Denetim masası bölgesel ayarlar kısmında virgül(,) yerine nokta(.) Seçtiğimde ondalıklı değerleri hatasız olarak aldım. Örneğin daha önce 24,12 olan değeri için hata alırken bölge ayarlarını değiştirince 24.12 şeklinde aldı. Program için kurulu pc de sürekli bu ayarı mı yapmam lazım? Teşekkürler
Hayallerinin Ulaştığı Yere...
Cevapla