Excelden veri alma hakkında (excel import)
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- greenegitim
- Üye
- Mesajlar: 713
- Kayıt: 28 Nis 2011 10:33
- Konum: İstanbul
Excelden veri alma hakkında (excel import)
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.
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!
Re: Excelden veri alma hakkında (excel import)
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
EXCELDE KAÇ SATIR VE SUTUN BİLGİ OLDUĞUNU BULAN PROCEDURUMUZU FORMUNUZDAKİ implementation SONRAKİ KISIMDA OLUŞTURUYORUZ
ŞİMDİDE EXCELI AÇIP İÇİNDEKİ BİLGİLERİ DATAMIZA KAYDEDEN KODU YAZALIM
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
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;
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) 917 kere indirildi
Re: Excelden veri alma hakkında (excel import)
bu kodu delphi kaçta kullanabilirim
Re: Excelden veri alma hakkında (excel import)
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.
Şu ana kadar hepsinde çalıştı.
En son xe5 te kullandım. sorun yok.
Çok temiz bir kod.
-
- Üye
- Mesajlar: 386
- Kayıt: 02 Tem 2007 09:43
Re: Excelden veri alma hakkında (excel import)
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.
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.
Re: Excelden veri alma hakkında (excel import)
Ö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;
Re: Excelden veri alma hakkında (excel import)
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..)
Re: Excelden veri alma hakkında (excel import)
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ş)
Re: Excelden veri alma hakkında (excel import)
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.
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.
Re: Excelden veri alma hakkında (excel import)
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
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