Create Delphi App : Export Import Excel Data

Create Delphi App : Export Import Excel Data
Tidak menyalahkan programmer kenapa udah ada program koq masih pakainya excel-excel juga. Memang harus diakui software besutan microsoft ini menjadi pioner dibidang SOftware yang dikhususkan untuk perkantoran.Sehingga meskipun nayak pesaing dalam dunia software serupa Microsoft Excel mempunyai daya tarik tersendiri bagi peminatnya.
Seiring perkembangan, software yang mungkin sudah terpakai lancar memerlukan pendukung (support) untuk supplay data untuk berbagai keperluan. Aplikasi dianggap bagus bila pengguna merasa nyaman dan fleksibel dalam mengolah data. Data2 dalam berkas perkantoran sering kali berupa file extensi XLS atau XLSX yang notabene merupakan hasil keluaran dari Microsoft Excel.

Dengan begitu aplikasi yang ingin kita ciptakan baiknya support dengan aplikasi basic dalam perkantoran. Export dan Import data dari atu ke Excel merupakan Tool yang menarik untuk ditambahkan dalam software yang ingin dibangun. Kadang data harus terlihat terbuka dan bisa diedit tanpa harus terkoneksi dengan database yang biasanya terpusat.(Tidak Semua Bos Paham Dengan Aplikasi Yang Rumit)

Cara kerja Aplikasi terangkum dalam urutan dibawah :

Procedure kerja untuk export data seperti dibawah :
  • XLApp := CreateOleObject(’Excel.Application’); –>command to call excel
  • XlBook:=XLApp.WorkBooks.Add; –>command to add workbook in excel
  • XlSheet := XlBook.worksheets.add; –> command to add worksheet in workbook
  • Go to the first record on table
  • create loop
  • write data on cell worksheet until end of file or last record


Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComObj, Grids, StdCtrls, ExtCtrls, DBCtrls, DBGrids, DB,
DBTables;

Mendefinisikan fungsi dalam delphi, (supaya bisa dipanggil dari posisi mana saja atau ketika Unit yang mengandung fungsi ini dipakai dalam unit lain fungsi Export ini bisa dipanggil secara bersama-sama)

public
    function exportab(tab: TADOQuery; SFile: string): Boolean;

TADOQuery : Sumber data yang ingin kita export datanya.

Berikut fungsi untuk export data dari Query yang sebelumnya sudah terdefinisi SQL yang akan mengambil data dari record yang diinginkan.
function TFrmUtama.exportab(tab: TADOQuery; SFile: string): Boolean;
const
    xlCellTypeLastCell = $0000000B;
var
    XLApp, XlSheet,XlBook: OLEVariant;
    x, r: Integer;
begin

    Result := False;
    XLApp := CreateOleObject('Excel.Application');
    try
        XlBook:=XLApp.WorkBooks.Add;
        XlSheet := XlBook.worksheets.add;
        x:=2;

        tab.First;
    while not tab.Eof do
    begin
    for r := 1 to tab.FieldCount do
    begin
        if tab.Fields[r-1].DataType=ftString then
        XlSheet.Cells.Item[x,r].Value:=''+tab.Fields[r-1].AsString
        else
        XlSheet.Cells.Item[x,r].Value:=tab.Fields[r-1].AsString
        end;
        tab.Next;
        inc(x,1);
    end;

  finally

  for r := 1 to tab.FieldCount do
  begin
      XlSheet.Cells.Item[1, r].Value:=tab.Fields[r-1].FieldName;
      XlSheet.cells[1, r].Interior.ColorIndex := 39;
    end;

  XlSheet.range['A1:z1000'].Columns.AutoFit;
    XlApp.visible:=true;

    XlApp.ActiveWorkBook.SaveAs(ExtractFilePath(Application.ExeName)+SFile);
    XlSheet.PrintPreview;
    XlApp.visible:=true;
    XlApp.free;
  end;

end;
 Memanggil Fungsi :
procedure TFrmUtama.toolExportDataClick(Sender: TObject);
begin
  DmData.QDataANak.Open; //
membuka koneksi & mengambil data
  exportab(DmData.QDataAnak,'export at'+ FormatDateTime(' dddd dd mmmm yyyy hh mm ss', Now )+'.xlsx');
end;
 Hasil dari fungsi diatas, akan disimpankankan File dengan format XLSX, dan diperlihatkan preview dari data yang berhasil dipindahkan dalam excel.

 IMPORT :

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComObj, Grids, StdCtrls, ExtCtrls, DBCtrls, DBGrids, DB,
DBTables;

type
TForm1 = class(TForm)
Button1: TButton;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
Table1: TTable;
Table1Sandibank: TStringField;
Table1NamaBank: TStringField;
Table1SandiKBI: TStringField;
procedure Button1Click(Sender: TObject);
function import(tab: Ttable; SFile: string): Boolean;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function TForm1.import(tab: Ttable; SFile: string): Boolean;
const
xlCellTypeLastCell = $0000000B;
var
XLApp, Sheet: OLEVariant;
x, y, r: Integer;
begin
Result := False;
XLApp := CreateOleObject('Excel.Application');
try
XLApp.Visible := False;
XLApp.Workbooks.Open(SFile); //open file
Sheet := XLApp.Workbooks[ExtractFileName(SFile)].WorkSheets[1];
Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
x := XLApp.ActiveCell.Row;
y := XLApp.ActiveCell.Column;
x := 2; //number of row in excel start import
repeat
tab.Append;
for r := 1 to y do
begin
tab.Fields[r-1].AsString:= XLApp.Cells.Item[x, r].Value;
end;
r:=1; // don’t remove this value, to keep value columns
tab.Post;
Inc(x, 1);
until XLApp.Cells.Item[x, r].Value=”;
finally
if not VarIsEmpty(XLApp) then
begin
XLApp.Quit;
XLAPP := Unassigned;
Sheet := Unassigned;
Result := True;
end;
end;

end;
procedure TForm1.Button1Click(Sender: TObject);
begin

if import(table1,ExtractFilePath(Application.ExeName)+ '.xls') then
ShowMessage(ExtractFilePath(Application.ExeName)+ '.xls has been imported!’);
end;
end.

=======================================================================
Berikut akan saya berikan kode untuk Eksport dan import data dengan Delphi:

Ekport tabel ke Excel

Tambahkan uses ComObj di unit anda, kemudian
buat tabel didatabase anda misalnya namanya tabel1 dengan fieldnya masing-masing diberi nama field “a” dan field “b”.
Aktifkan dataset anda, terserah anda pakai koneksi apa(kalau saya kebiasaan pakai dbexpress. Kemudian ketik perintah berikut:

procedure TForm1.Button1Click(Sender: TObject);
var v:Variant;
i:integer;
begin
with sqlclientdataset1 do begin
close;
open;
end;


try
v:=createoleobject('excel.application');
v.workbooks.add;

i:=1;
while not sqlclientdataset1.Eof do begin
v.cells.RANGE['A'+INTTOSTR(I)]:=SQLCLIENTDATASET1A.AsString;
V.CELLS.RANGE['B'+inttostr(i)]:=sqlclientdataset1b.AsString;
sqlclientdataset1.Next;
inc(i);
end;
v.visible:=true;
except
on e:exception do begin
v:=null;
end;
end;

Keterangan:
V:=null adalah untuk mengantisipasi seumpama di komputer anda tidak ada aplikasi excel.

Import dari tabel ke excel.

Untuk import dari excel ke tabel database perintahnya sangat mudah. Berikut akan saya berikan contohnya(jangan lupa uses ke Comobj juga dulu).

Tambahkan komponen opendialog di project anda, kemudian ketik perintah berikut ini:

procedure TForm1.Button2Click(Sender: TObject);
var v:Variant;
i:integer;
begin
if opendialog1.Execute then
begin

try
v:=createoleobject('excel.application');
v.workbooks.open(opendialog1.FileName);
i:=1;
while vartostr(v.cells.range['a'+inttostr(i)])<>'' do
begin
sqlconnection1.ExecuteDirect('insert into tabel1(a,b) values('+
quotedstr(vartostr(v.cells.range['a'+inttostr(i)])) +
','+
quotedstr(vartostr(v.cells.range['b'+inttostr(i)])) + ')');
inc(i);
end;
v.quit;
//optional
with sqlclientdataset1 do begin
close;
open;
end;
except
on e:exception do begin
raise exception.Create(e.message);
end;
end;
end;
end;



Sumber :
http://anashidayat.blogspot.com/
http://edysoftware.com/