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.
Memanggil Fungsi :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;
Hasil dari fungsi diatas, akan disimpankankan File dengan format XLSX, dan diperlihatkan preview dari data yang berhasil dipindahkan dalam excel.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;
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') thenend;
ShowMessage(ExtractFilePath(Application.ExeName)+ '.xls has been imported!’);
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/
EmoticonEmoticon