Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
dogan
Üye
Mesajlar: 173 Kayıt: 17 Eki 2014 10:11
Mesaj
gönderen dogan » 22 Tem 2015 08:39
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;
mrmarman
Üye
Mesajlar: 4741 Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:
Mesaj
gönderen mrmarman » 22 Tem 2015 11:05
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...
dogan
Üye
Mesajlar: 173 Kayıt: 17 Eki 2014 10:11
Mesaj
gönderen dogan » 23 Tem 2015 02:30
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...
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
mrmarman
Üye
Mesajlar: 4741 Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:
Mesaj
gönderen mrmarman » 23 Tem 2015 10:50
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;
Serhat
Üye
Mesajlar: 203 Kayıt: 27 Tem 2014 11:10
Mesaj
gönderen Serhat » 23 Tem 2015 07:28
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
Mesaj
gönderen denizfatihi » 24 Tem 2015 08:47
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;