Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Excelden veri çekerken lisans uyarısı
#11
(Bugün, 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.
WWW
Cevapla
#12
DevExpress kullanın. Excel'e bile gerek olmuyor Smile
Yazılım Topluluğumuz -> Tıklayın
Kişisel Tanıtım Sitem -> Tıklayın
21 y/o, sadece öğrenmeye odaklanmış, insancık..
Cevapla
#13
(2 saat önce)akuyumcu63 Adlı Kullanıcıdan Alıntı:
(Bugün, 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
(2 saat önce)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.
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
Question NetHttpClient nesnesi e Get metodu veri çekme problemi delphicim 3 470 22-07-2022, Saat: 20:40
Son Yorum: delphicim
  Excel Veri Aktarma Hatası MosCom 5 407 22-06-2022, Saat: 09:10
Son Yorum: MosCom
  ethernet veri akışı guvenlik 3 431 13-05-2022, Saat: 20:33
Son Yorum: mkysoft
  Web Servis (WDSL) veri çekmeye çalışıyorum KUNTAY 8 628 06-02-2022, Saat: 17:20
Son Yorum: KUNTAY
  Uygulama, geçerli işlem için yanlış türde bir değer kullanıyor. şeklinde hata uyarısı denizfatihi 11 991 30-12-2021, Saat: 13:45
Son Yorum: denizfatihi



Konuyu Okuyanlar: bilsoft8b, 1 Ziyaretçi