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
  char AnsiChar hatası Kerembacioglu 0 26 Dün, Saat: 23:32
Son Yorum: Kerembacioglu
  HTML Sayfaya Veri Çekme Hayati 1 138 17-07-2019, Saat: 21:44
Son Yorum: SimaWB
  Parmak izi okuyucudan veri çekmek ermanispir@gmail.com 9 458 16-07-2019, Saat: 13:47
Son Yorum: wiseman
  DBGrid1 den Excel Veri Gönderme OZCANK 0 121 13-07-2019, Saat: 14:03
Son Yorum: OZCANK
  soru bankasında random ve data çekme sadikacar60 3 192 11-07-2019, Saat: 21:50
Son Yorum: cinarbil



Konuyu Okuyanlar: 1 Ziyaretçi