Çok Yakında Yeni Bir Arayüzle karşınızdayız! http://yeni.delphican.com/

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Excel'den veri çekme hatası
#1
merhaba arkadaşlar aşağıdaki kod bloğu ile excel sayfasındaki iki sütunda bulunan verileri programa sorunsuz bir şekilde çekiyorum. 
sorun şuki exceldeki son satır gelmiyor. bir türllü doğru kodu yazamadım until'a yardımcı olursanız sevinirim herkese iyi çalışmalar.

    Repeat
   stringgrid1.Cells[1,i]:=uygulama.ActiveSheet.cells[i,1].Value;
   stringgrid1.Cells[2,i]:=uygulama.ActiveSheet.cells[i,2].Value;
   inc(i);
   until uygulama.ActiveSheet.cells[i,1].value='';
 end;

farklı olarak bir sonsatır fonksiyonu ile excelde içinde veri olan son satırı saptadıktan sonra sstr değişkenine atıyorum.

sstr=sonsatir(1);


daha sonra until'a
i=sstr+1;
kodunu yazıyorum ama yine sonuç değişmedi maalesef
Cevapla
#2
Merhaba,
i için, döngüden önceki, başlangıç değeri nedir?
0 mı 1 mi
0 değilse 0 yapıp dener misiniz.
Cevapla
#3
Selamlar

Öncelikle aşağıdaki fonksiyonu yazarak exceldeki satır sayısını tesbit edelim.

function excelsonsatir(AColumn: Integer): Integer;
const
 xlUp = 3;
begin
   Result := XLApp.Range[Char(96 + AColumn) + IntToStr(65536)].end[xlUp].Rows.Row;
end;

Sonrasında ise butona yazdığım örneği kendine göre adapte edebilirsin.

procedure Tfrmrecete.sBitBtn4Click(Sender: TObject);
var i:integer;
birim, stokkodu, stokadi: string;
miktar, agirlik, tutar : real;
begin

   if application.MessageBox('Veri aktarımı başlayacaktır',PChar(application.Title),mb_yesno)=idno then
  exit;
  try
    XLApp := GetActiveOleObject('Excel.Application');
  except
  try
    XLApp := CreateOleObject('Excel.Application');
  except
    ShowMessage('Excel kurulu değil');
    Exit;
  end;
  end;
  XLApp.Workbooks.Open(edit1.Text);
  XLApp.Visible := False;// Hane Kayıtları Aktarımı
  sayfa:=XLApp.workbooks[1].worksheets[1];

  sonsatir:=excelsonsatir(1);
  edit10.Text :=inttostr(sonsatir); // excel satır sayısını buraya kaydettim.
  for i:=2 to strtoint(edit10.Text) do // Excel tablosundaki 1.satırdan son satıra kadar oku
  begin // burada döngüyü while döngüsü ile Sayfa.cells[i,1].text değerini kontrol ettirerek yapabilirsiniz de
    dm.qryhammadde.Insert;
    dm.qryhammadde.FieldByName('stokkodu').Text:= (Sayfa.cells[i,5].text);
     dm.qryhammadde.FieldByName('stokadi').Text:=(Sayfa.cells[i,6].text);
    dm.qryhammadde.Post;
   end;

   XLApp.DisplayAlerts := False; //Excel mesajlarını görünteleme
  XLApp.Quit;
  XLApp := Unassigned;
  application.MessageBox('Excel Aktarımı Tamamlandı. ','OK',64);
end;
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Cevapla
#4
while döngüsünden fazla bir farkı yok gibi yine de denedim ama sonuç değişmedi. kafama takılan şey şu excel sayfamda aktif yani görünen sütun sayısı kayıt sayısından daha fazla olmadığı için böyle birşey olabilir mi acaba?
Cevapla
#5
Tam olarak anlatmak istediğinizi anlayamadım. Göndermiş olduğum kod tamamen çalışan bir kod. Kullanmış olduğunuz excel örneğini sadeleştirerek ekran resmini atar mısınız ya da burada paylaşır mısınız?
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Cevapla
#6
Photo 
1. resim excel dosyam 2. resim programın görüntüsü görüldüğü gibi son kayıt programa gelmiyor 
kodlarım da şöyle:

(bu arada i:=0 da denedim)

    i:=1;
   while i<tr+1 do
     begin
       stringgrid1.Cells[1,i]:=uygulama.ActiveSheet.cells[i,1].Value;
       stringgrid1.Cells[2,i]:=uygulama.ActiveSheet.cells[i,2].Value;
       inc(i);
       form3.Caption:='Toplam '+inttostr(i)+' Adet Kelimeniz Var';
     end;

yarım eden herekese teşekkürler sorunu tespit ettim

stringgrid.rowcount:=excelsonsatir(1)

bu yüzden son satır görünmüyordu şu şekilde değiştirince problem çözüldü
stringgrid.rowcount:=excelsonsatir(1)+1


Ek Dosyalar Resimler
       
Cevapla
#7
Selamlar
kodu şu şekilde değiştirdim.
function excelsonsatir(AColumn: Integer): Integer;
const
xlUp = 3;
begin
  Result := XLApp.Range[Char(96 + AColumn) + IntToStr(65536)].end[xlUp].Rows.Row;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
if application.MessageBox('Veri aktarımı başlayacaktır',PChar(application.Title),mb_yesno)=idno then
 exit;
 try
   XLApp := GetActiveOleObject('Excel.Application');
 except
 try
   XLApp := CreateOleObject('Excel.Application');
 except
   ShowMessage('Excel kurulu değil');
   Exit;
 end;
 end;
 XLApp.Workbooks.Open(edit1.Text);
 XLApp.Visible := False;// Hane Kayıtları Aktarımı
 sayfa:=XLApp.workbooks[1].worksheets[1];

 sonsatir:=excelsonsatir(1);
 edit2.Text :=inttostr(sonsatir); // excel satır sayısını buraya kaydettim.
 i:=1;
  while i< strtoint(edit2.text)+1 do

    begin
      stringgrid1.Cells[1,i] := sayfa.cells[i,1].text;
      stringgrid1.Cells[2,i]:=sayfa.cells[i,2].text;
      inc(i);
   //   form3.Caption:='Toplam '+inttostr(i)+' Adet Kelimeniz Var';
    end;

dikkat edersen while satırına +1 değeri ekleyerek son satırı da eklemesini sağladım.

Kod şu anda exceldeki tüm satırları alarak ekledi. +1 değerini koymadığımda, son satırı eklemiyor. Bu sebeple +1 ekle lütfen.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Cevapla
#8
(17-07-2019, Saat: 16:03)wiseman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Selamlar
kodu şu şekilde değiştirdim.
function excelsonsatir(AColumn: Integer): Integer;
const
xlUp = 3;
begin
  Result := XLApp.Range[Char(96 + AColumn) + IntToStr(65536)].end[xlUp].Rows.Row;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
if application.MessageBox('Veri aktarımı başlayacaktır',PChar(application.Title),mb_yesno)=idno then
 exit;
 try
   XLApp := GetActiveOleObject('Excel.Application');
 except
 try
   XLApp := CreateOleObject('Excel.Application');
 except
   ShowMessage('Excel kurulu değil');
   Exit;
 end;
 end;
 XLApp.Workbooks.Open(edit1.Text);
 XLApp.Visible := False;// Hane Kayıtları Aktarımı
 sayfa:=XLApp.workbooks[1].worksheets[1];

 sonsatir:=excelsonsatir(1);
 edit2.Text :=inttostr(sonsatir); // excel satır sayısını buraya kaydettim.
 i:=1;
  while i< strtoint(edit2.text)+1 do

    begin
      stringgrid1.Cells[1,i] := sayfa.cells[i,1].text;
      stringgrid1.Cells[2,i]:=sayfa.cells[i,2].text;
      inc(i);
   //   form3.Caption:='Toplam '+inttostr(i)+' Adet Kelimeniz Var';
    end;

dikkat edersen while satırına +1 değeri ekleyerek son satırı da eklemesini sağladım.

Kod şu anda exceldeki tüm satırları alarak ekledi. +1 değerini koymadığımda, son satırı eklemiyor. Bu sebeple +1 ekle lütfen.

Evet ama dediğim gibi sorun benim stringgridin satır sayısını hatalı şekilde sınırlamamdan kaynaklanıyormuş. Onu +1 olarak değiştirince sorun çözüldü. Yardımlarınız içşn tekrar teşekkür
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  DbGrid deki Kolon içindeki veri arama Esrefhan 4 125 9 dakika önce
Son Yorum: Esrefhan
  ListView Bileşeninde Seçili Satırın Veri Tabanından Silinmesi bünyamin68 5 217 25-11-2019, Saat: 21:44
Son Yorum: BGNew
  WSDL - SOAP classes must derive from TRemotable hatası pro_imaj 11 516 22-11-2019, Saat: 23:03
Son Yorum: ismailkocacan
Smile TBCDField,TFMTBCDField , floattostr tip dönüşüm hatası(çözüldü) 41linea41 2 97 22-11-2019, Saat: 20:34
Son Yorum: 41linea41
  HTTP/1.0 302 moved temporarily. hatası erdogan 5 286 07-11-2019, Saat: 17:24
Son Yorum: uparlayan



Konuyu Okuyanlar: 1 Ziyaretçi