Excel import hata

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
dogan
Üye
Mesajlar: 173
Kayıt: 17 Eki 2014 10:11

Excel import hata

Mesaj gönderen dogan »

Selam;

İlk önce çalıştırdığım sonrasında "message 'OLE error 800A03EC'. Process Excelim.exe (8068)" hatası almaya başladım hatayı da bulamadım...

Kod: Tümünü seç

procedure TForm1.ExClick(Sender: TObject);
var
  Book: Variant;
  Excel, Sheet: Variant;
  Satir, Kolon: Integer;
  Str: String;
begin
  Excel := CreateOleObject('Excel.Application');
  OpenDialog1.Filter := 'Excel Dosyaları|*.xls;*.xlsx|Xls|*.xls|Xlsx|*.xlsx';
  if OpenDialog1.Execute then
  begin
    Book := Excel.WorkBooks.Open(OpenDialog1.FileName);
    Sheet := Book.worksheets[1];
    for Satir := 0 to Excel.ActiveSheet.UsedRange.Rows.Count do
    begin
      Str := Sheet.cells[Satir, 1];
      Caption := Str;
      Update;
      MyExel.Append;
      for Kolon := 1 to 7 do
        MyExel.Fields[Kolon - 1].AsString := Sheet.cells[Satir, Kolon];
      MyExel.Post;
    end;
    Excel.WorkBooks.Close;
    Excel.Quit;
    Excel := Unassigned;
    Sheet := Unassigned;
  end;
end;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Excel import hata

Mesaj gönderen mrmarman »

Merhaba.
Excel'de satır sayacı 0'dan değil 1'den başlıyor. FOR döngünü 0 yerine 1'den başlatmayı dener misin... :idea:
Resim
Resim ....Resim
Kullanıcı avatarı
dogan
Üye
Mesajlar: 173
Kayıt: 17 Eki 2014 10:11

Re: Excel import hata

Mesaj gönderen dogan »

mrmarman yazdı:Merhaba.
Excel'de satır sayacı 0'dan değil 1'den başlıyor. FOR döngünü 0 yerine 1'den başlatmayı dener misin... :idea:

Teşekkür ederim hocam...



Hocam satır adeti ile de sıkıntımda var excel deki kayıt sayısı belli olmadığı için adet giremiyorum burayı nasıl çözümlerim...

Kod: Tümünü seç

for Satir := 0 to Excel.ActiveSheet.UsedRange.Rows.Count do
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Excel import hata

Mesaj gönderen mrmarman »

Benim uyguladığım şekli aşağıdaki gibi. Satır aralarında boşluk dahi olsa buna takılmaz.

Bir dene istersen

Kod: Tümünü seç

Const
  xlCellTypeLastCell = $0000000B;
Var
  SatirSayisi : Integer;
begin
  SatirSayisi := Excel.ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Row;
 

// Senin örneğine uyarlanmış hali...

Kod: Tümünü seç

Uses ComObj;

procedure TForm1.BitBtn1Click(Sender: TObject);
Const
  xlCellTypeLastCell = $0000000B;
var
  Book: Variant;
  Excel, Sheet: Variant;
  Satir, Kolon: Integer;
  Str: String;
begin
  Excel := CreateOleObject('Excel.Application');
  With TOpenDialog.Create(nil) do
  begin
    Filter := 'Excel Dosyaları|*.xls;*.xlsx|Xls|*.xls|Xlsx|*.xlsx';
    if Execute then
    begin
      Book  := Excel.WorkBooks.Open(FileName);
      Sheet := Book.worksheets[1];
      for Satir := 1 to Excel.ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Row do
      begin
        Str := Sheet.cells[Satir, 1];
        Caption := Str;
        Showmessage(str);
        //Update;
        //MyExel.Append;
        //for Kolon := 1 to 7 do
        //  MyExel.Fields[Kolon - 1].AsString := Sheet.cells[Satir, Kolon];
        //MyExel.Post;
      end;
      Excel.WorkBooks.Close;
      Excel.Quit;
      Excel := Unassigned;
      Sheet := Unassigned;
    end;
  end;
end;
Resim
Resim ....Resim
Kullanıcı avatarı
Serhat
Üye
Mesajlar: 203
Kayıt: 27 Tem 2014 11:10

Re: Excel import hata

Mesaj gönderen Serhat »

Selam...

Arkadaşlar yeni bir konu açmak istemediğimden buradan sorumu sormak daha doğru olabilir diye düşündüm..


Bende exceldeki sayfaları databaseye yüklerken ilk satırı ekledikten sonra "Invalid variant operation" hatası veriyor neden olabilir...

Kod: Tümünü seç

procedure TForm1Button2Click(Sender: TObject);
const
  xlCellTypeLast = $000000B;
var
  Excel: Variant;
  m, n: Integer;
begin
  if not OpenDialog1.Execute then
    Exit;
  Excel := CreateOleObject('Excel.Application');
  Excel.WorkBooks.Open(OpenDialog1.FileName);
  m := 1;
  n := Excel.ActiveCell.SpecialCells(xlCellTypeLast).Row;
  while m <> n do
  begin
    with Model do
    begin
      Close;
      SQL.Clear;
      SQL.Add('Insert Into Modeller (ALAN_1, ALAN_2, ALAN_3, ALAN_4, ALAN_5)');
      SQL.Add(' Values (:a1, :a2, :a3, :a4, :a5)');
      ParamByName('a1').AsString := Excel.Cells[m, 1].Value;
      ParamByName('a2').AsString := Excel.Cells[m, 2].Value;
      ParamByName('a3').AsString := Excel.Cells[m, 3].Value;
      ParamByName('a4').AsString := Excel.Cells[m, 4].Value;
      ParamByName('a5').AsString := Excel.Cells[m, 5].Value;
      ExecSQL;
      inc(m);
    end;
    Excel.WorkBooks.Close;
    Excel.Quit;
    Excel := Unassigned;
  end;
end;
denizfatihi

Re: Excel import hata

Mesaj gönderen denizfatihi »

Serhat yazdı:Selam...

Arkadaşlar yeni bir konu açmak istemediğimden buradan sorumu sormak daha doğru olabilir diye düşündüm..


Bende exceldeki sayfaları databaseye yüklerken ilk satırı ekledikten sonra "Invalid variant operation" hatası veriyor neden olabilir...

Kod: Tümünü seç

procedure TForm1.BitBtn8Click(Sender: TObject);
var
v,sayfa, ExcelOku :variant;{v excel prg, sayfa calisma sayfasi}
xxx,s,a,d:integer;
r:variant;
begin
if OpenDialog1.Execute then
begin
v:=createoleobject('excel.application');//excel yaratıldı..
v.workbooks.add(OpenDialog1.FileName);//excel in içine elinizdeki dosya eklendi..
ListBox1.Items:=OpenDialog1.Files;//seçilen dosyaları aktar
Edit17.Text:=IntToStr(v.Range[Char(96+1)+IntToStr(65536)].end[3].Rows.Row);

//sayfa:=v.workbooks[1].worksheets[1];//
sayfa:=v.workbooks[1].worksheets['EDATA'];
r:=v.activeworkbook.worksheets['EDATA'];//Sayfa İçi İşlemlere Yardımcı
                                 //Olacak Değişken Ataması ÇOOKKK ÖNEMLİİİ..

d:=0;
s:=0;
a:=Strtoint(Edit17.Text)-1 ; //Toplam Kayıt Sayısı Girildi..(Excel'deki) Döngü İçin..
//a:=300; //Toplam Kayıt Sayısı Girildi..(Excel'deki) Döngü İçin..
Gauge1.MaxValue:=a;
for xxx:=s to a do
begin
p:=xxx;
d:=d+1;
Table2.Append;
Table2GONDERILDI.Value:=r.cells[d,1];
Table2CARINO.Value:=r.cells[d,2];
Table2CARI_UNVANI.Value:=r.cells[d,3];
Table2ALAN_KODU.Value:=r.cells[d,4];
Table2FAX.Value:=r.cells[d,5];
Table2TL_TUTAR.Value:=r.cells[d,6];
Table2TL.Value:=r.cells[d,7];
Table2USD_TUTAR.Value:=r.cells[d,8];
Table2USD.Value:=r.cells[d,9];
Table2EUR_TUTAR.Value:=r.cells[d,10];
Table2EUR.Value:=r.cells[d,11];
Table2TARIH.Value:=r.cells[d,12];
Table2DURUMU.Value:=r.cells[d,13];
Table2GON_TARIHI.Value:=r.cells[d,14];
Table2SAAT.Value:=r.cells[d,15];
Table2EMAIL.Value:=r.cells[d,16];
Table2GON_EMAIL.Value:=r.cells[d,17];
Table2GON_TIPI.Value:=r.cells[d,18];
Table2TIP_NO.Value:=r.cells[d,19];
Table2DIGER1.Value:=r.cells[d,20];
Table2DIGER2.Value:=r.cells[d,21];
Table2DIGER3.Value:=r.cells[d,22];

Table2.post; //Değer Aktarmaları Yapılarak Post Edildi..
Application.ProcessMessages;//Sistem Mesajları İçin..
//ProgressBar1. Progress:=xxx;//Gauge un Eş Zamanlı Göstergesi..
Gauge1.Progress:=xxx;//Gauge un Eş Zamanlı Göstergesi..

end;
end;
//ShowMessage('Akratma İşlemi Başarıyla Bitirildi..');
Gauge1.Progress:=0;
v.quit;
Cevapla