Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Excelden veri çekerken lisans uyarısı
#11
(29-09-2022, Saat: 00:20)apachi2006 Adlı Kullanıcıdan Alıntı:
(26-09-2022, Saat: 18:12)Master_Crazy Adlı Kullanıcıdan Alıntı: There are many examples of excel automation using delphi.
1- Import Excel, Office, ... Type Library (Excel_TLB.pas)  and see it change for each Excel version in Excel_TBL.pas file
(e.g:  //   Hint: Symbol 'Application' renamed to 'ExcelApplication' )
2- Add Excel_TBL, Office_TBL as below
//--------------------------------------------------------------------------------------------------------------------------------
interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Excel_TBL, Office_TBL;
//--------------------------------------------------------------------------------------------------------------------------------
and ComObj; as below
//--------------------------------------------------------------------------------------------------------------------------------
implementation

{$R *.dfm}
uses
   ComObj;
//--------------------------------------------------------------------------------------------------------------------------------
Please google search: delphi + excel + Automation + Charlie Calvert.
There are two different ways to run OLE automation from inside Delphi:
You can create an instance of the object in these two different ways:

XLApp := Excel_TLB.CoApplication_.Create; // Initialize an interface

XLApp := CreateOleObject('Excel.Application'); // Initialize a Variant

One involves using interfaces, while the second involves using an OLE class called IDispatch along with a Delphi type called a variant. Interfaces give you the advantage of type checking your code on the client side, as well as relatively high performance. However, I am going to start the paper working with the somewhat easier to understand IDispatch and variants technology, and move on to cover interfaces after all the basics are clearly established. Do not worry if you don't yet understand the differences between the two techniques, as this subject will be cleared up over the course of the paper. At this stage, you just need to be aware that there are at least two ways to access OLE automation objects from Delphi, and that I am going to start out by showing you one that uses IDispatch and variants.

The following code, found in Listing 1, shows a bare bones example of a Delphi application that launches Excel. Just skim over the code for now, as I will spend the rest of this section of the paper explaining how it works.


 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

 const
 SELDIRHELP = 1000;

 implementation

{$R *.dfm}
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;



procedure btnolcucekClick(Sender: TObject);
var EXCELDEKISATIR,EXCELDEKISUTUN:Integer;
SAYFA: Variant;
begin
OpenDialog1.FileName:='c:\\exceldosyasi.xlsx';
//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
     data.Append;
     dataadi.AsString:= (exceldosyasi.ActiveSheet.Cells[EXCELDEKISATIR,1].Value);
     datasoyadi.AsString:= (exceldosyasi.ActiveSheet.Cells[EXCELDEKISATIR,2].Value);
     data.Post;
     end;
     end;
   finally
   if not VarIsEmpty(EXCELDOSYASI) then
    begin
    EXCELDOSYASI.DisplayAlerts := False;
    EXCELDOSYASI.Quit;
    EXCELDOSYASI := Unassigned;
    end;
   end;
 end;


Herhangi bir versiyon problemi olmadan kullanıyorum. Deneyin lütfen.

bende bu kodlamayı kullanıyorum. Ancak excel aktivasyon istiyorsa yüklemeyi yarıda kesiyor. sizde bu sorun oluşmuyor mu ?

bu sorundan dolayı component arayışına girdim. pratik kullanışlı bir component arıyorum. free olur ise daha iyi olur. sadece veri çekecek.
Cevapla
#12
DevExpress kullanın. Excel'e bile gerek olmuyor Smile
kisisel_logo_dark.png
WWW
Cevapla
#13
(29-09-2022, Saat: 11:55)akuyumcu63 Adlı Kullanıcıdan Alıntı:
(29-09-2022, Saat: 00:20)apachi2006 Adlı Kullanıcıdan Alıntı:
 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

 const
 SELDIRHELP = 1000;

 implementation

{$R *.dfm}
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;



procedure btnolcucekClick(Sender: TObject);
var EXCELDEKISATIR,EXCELDEKISUTUN:Integer;
SAYFA: Variant;
begin
OpenDialog1.FileName:='c:\\exceldosyasi.xlsx';
//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
     data.Append;
     dataadi.AsString:= (exceldosyasi.ActiveSheet.Cells[EXCELDEKISATIR,1].Value);
     datasoyadi.AsString:= (exceldosyasi.ActiveSheet.Cells[EXCELDEKISATIR,2].Value);
     data.Post;
     end;
     end;
   finally
   if not VarIsEmpty(EXCELDOSYASI) then
    begin
    EXCELDOSYASI.DisplayAlerts := False;
    EXCELDOSYASI.Quit;
    EXCELDOSYASI := Unassigned;
    end;
   end;
 end;


Herhangi bir versiyon problemi olmadan kullanıyorum. Deneyin lütfen.

bende bu kodlamayı kullanıyorum. Ancak excel aktivasyon istiyorsa yüklemeyi yarıda kesiyor. sizde bu sorun oluşmuyor mu ?

bu sorundan dolayı component arayışına girdim. pratik kullanışlı bir component arıyorum. free olur ise daha iyi olur. sadece veri çekecek.

Benim excellerim lisanslı olduğu için şimdiye kadar farketmedim. Halil'inde bahsettiği DEV EXPRES hakkında araştırma yapmanı tavsiye ederim.
Cevapla
#14
(29-09-2022, Saat: 12:15)Halil Han BADEM Adlı Kullanıcıdan Alıntı: DevExpress kullanın. Excel'e bile gerek olmuyor Smile

farklı bir programdan kayıtları export ediyorum. Daha sonra da o dosyayı kendi programıma import etmem gerekiyor. kayıt sayısı bazen 4 - 5 bin kadar olabiliyor.
Cevapla
#15
(29-09-2022, Saat: 14:03)akuyumcu63 Adlı Kullanıcıdan Alıntı:
(29-09-2022, Saat: 12:15)Halil Han BADEM Adlı Kullanıcıdan Alıntı: DevExpress kullanın. Excel'e bile gerek olmuyor Smile

farklı bir programdan kayıtları export ediyorum. Daha sonra da o dosyayı kendi programıma import etmem gerekiyor. kayıt sayısı bazen 4 - 5 bin kadar olabiliyor.

Yine fark etmez üstadım. Devexpress güncellemesi ile 4-5bin satır onun için hiçbir şey
kisisel_logo_dark.png
WWW
Cevapla
#16
(29-09-2022, Saat: 14:46)Halil Han BADEM Adlı Kullanıcıdan Alıntı:
(29-09-2022, Saat: 14:03)akuyumcu63 Adlı Kullanıcıdan Alıntı: farklı bir programdan kayıtları export ediyorum. Daha sonra da o dosyayı kendi programıma import etmem gerekiyor. kayıt sayısı bazen 4 - 5 bin kadar olabiliyor.

Yine fark etmez üstadım. Devexpress güncellemesi ile 4-5bin satır onun için hiçbir şey

dxSpreadSheet componenti var onunla çok kolay bir şekilde alınabiliyor. 
dxSpreadSheet1.LoadFromFile('C:\....');

buraya kadar işler gayet güzel. dxSpreadSheet den okuyup cxgride yada memtable a aktarmak için örnek bulamadım.
Cevapla
#17
(30-09-2022, Saat: 09:51)akuyumcu63 Adlı Kullanıcıdan Alıntı:
(29-09-2022, Saat: 14:46)Halil Han BADEM Adlı Kullanıcıdan Alıntı: Yine fark etmez üstadım. Devexpress güncellemesi ile 4-5bin satır onun için hiçbir şey

dxSpreadSheet componenti var onunla çok kolay bir şekilde alınabiliyor. 
dxSpreadSheet1.LoadFromFile('C:\....');

buraya kadar işler gayet güzel. dxSpreadSheet den okuyup cxgride yada memtable a aktarmak için örnek bulamadım.

Rica ederim ne demek, teşekkürünüz için ben teşekkür ederim(!)
Dökümanlar ile çok kolay örneklere ulaşabilirsiniz ya da biraz araştırma ile
https://supportcenter.devexpress.com/tic...d-database
kisisel_logo_dark.png
WWW
Cevapla
#18
(30-09-2022, Saat: 10:29)Halil Han BADEM Adlı Kullanıcıdan Alıntı:
(30-09-2022, Saat: 09:51)akuyumcu63 Adlı Kullanıcıdan Alıntı: dxSpreadSheet componenti var onunla çok kolay bir şekilde alınabiliyor. 
dxSpreadSheet1.LoadFromFile('C:\....');

buraya kadar işler gayet güzel. dxSpreadSheet den okuyup cxgride yada memtable a aktarmak için örnek bulamadım.

Rica ederim ne demek, teşekkürünüz için ben teşekkür ederim(!)
Dökümanlar ile çok kolay örneklere ulaşabilirsiniz ya da biraz araştırma ile
https://supportcenter.devexpress.com/tic...d-database

zaman ayırıp değerli bilgi ve tecrübelerini paylaşan herkese ve Halil kardeşim sana Çok teşekkür ediyorum. 

ben genelde konuyu nihayete erdirdikten sonra kendi çözümü mü de paylaşarak sonuçlandırmaya çalışıyorum. tabi burada herkes çok ciddi emekler sonundaki bilgi ve tecrübelerini paylaşıyorlar. teşekkür bu işin nezaketi. bundan asla geri durmam. 

Halil kardeşim seni duymak bizi mutlu etti. 

yeni konu başlıklarında görüşmek üzere. Allah'a Emanet Olun.
Cevapla
#19
Excel dosyalarına ODBC veya Jet (ACE) sürücüleri üzerinden de bağlanarak içeriğe erişebilirsiniz.

ADO bileşenlerinde ConnectionString ile erişmek için: https://www.connectionstrings.com/excel/

FireDAC ile erişmek için: https://www.delphican.com/showthread.php...5#pid29635

Burada dikkat edilmesi gereken nokta sayfalara tablo gibi erişme imkanı vardır ve sayfa isimleri (mesela Sayfa1 için) "select * from [$Sayfa1] biçiminde sorgulanarak elde edilebilir.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  IEC 61850 Potokolünden veri alma shooterman 1 413 14-03-2024, Saat: 11:38
Son Yorum: shooterman
  Veri Tabanına Kontrollü Kayıt Yaptırma bünyamin68 15 617 08-03-2024, Saat: 00:06
Son Yorum: TuncayDelphi
  Problem - ZKTeco Cihazlardan Anlık Veri Alma mad85 16 7.951 25-12-2023, Saat: 11:35
Son Yorum: osiso
  Cas Terazi Veri gönderimi Delphi sürüm sorunu KUNTAY 12 4.300 08-11-2023, Saat: 00:06
Son Yorum: berkan
  Delphi Sürekli Adı Değişen Excel Dosyasından Veri Çekme bünyamin68 2 555 05-10-2023, Saat: 12:50
Son Yorum: mcuyan



Konuyu Okuyanlar: 1 Ziyaretçi