Delphi Export Dataset To XML Excel

Print Friendly

Delphi Export Dataset To XML Excel

Sekadar akal-akalan buat generate XML menggunakan TClientDataset. Kode ini sederhana dan telah ditulis agar semudah mungkin dibaca.

TClientDataset memiliki fitur untuk mengkonversi baris-baris data dan definisi field dari sebuah TDataset ke Data Packet XML, sehingga bisa kita pake buat menggenerate data untuk dibaca oleh Microsoft Excel.

Karena sumber data adalah TDataset, kode berikut ini akan dapat menggenerate Data Packet XML dari berbagai sumber: ADO, Zeos, MyDAC, UniDAC, IBDataset, dsb. Pokoknya asalkan sumber data berupa turunan TDataset, Insya Allah bisa dikonversi.

* Fungsi ini menggunakan midas.dll, yang sebaiknya dicopy ke folder aplikasi

* Untuk aplikasi DLL-based (seperti UniGUI/Raudus module for ISAPI), midas.dll dicopy ke direktori System32.

* Sebagai alternatif midas.dll (dynamic lingking), bisa dicoba menggunakan unit midaslib, ditambahkan ke clausa uses.

function JadikanXMLKeExcel(Dataset: TDataset; FileName: TFileName): Boolean;
{tambah ke uses: Provider, DBClient, midaslib }
var
  prov: TDataSetProvider;
  cds : TClientDataSet;
  ls  : TStringList;
  st  : TMemoryStream;
  tmp : String;
  i,j : integer;
begin
  Result := False;
  if not Dataset.Active then
    raise Exception.Create('Dataset belum dibuka.');
  if Dataset.IsEmpty then
    raise Exception.Create('Data kosong.');
  if FileExists(FileName) then
    raise Exception.Create('File sudah ada.');
  if lowercase(ExtractFileExt(FileName))<>'.xml' then
    raise Exception.Create('File harus berekstensi XML.');

  prov  := TDataSetProvider.Create(Application);
  cds   := TClientDataSet.Create(Application);
  try
    prov.dataset := Dataset;
    cds.SetProvider(prov);
    cds.Open;
    st := TMemoryStream.Create;
    try
      st.Clear;
      cds.SaveToStream(st, dfXML);
      st.Position := 0;
      ls    := TStringList.Create;
      try
        ls.LoadFromStream(st);
        tmp := ls.Text;
        i := pos('<METADATA>', UpperCase(tmp));
        j := pos('</METADATA>', UpperCase(tmp))+length('</METADATA>');
        Delete(tmp,i,j-i);
        ls.Text := tmp;
        ls.SaveToFile(FileName);
        Result := FileExists(FileName);
      finally
        ls.Free;
      end;
    finally
      st.Free;
    end;
  finally
    prov  .Free;
    cds   .Free;
  end;
end;
Sayangi Dengan Berbagi Sayangi Dengan Berbagi
You share, you care…
 

Dengan kode di atas, secara sederhana, kita bisa melakukan konversi dan export data ke Excel. Bila data sudah tampil di DBGrid dan ingin dieskpor, cukup ekspor saja dataset yang terhubung ke DBgrid tersebut. Dengan cara ini kita telah dapat melakukan export DBGrid ke Excel.

Contoh penggunaan:

procedure TForm3.Button1Click(Sender: TObject);
begin
  MyQuery1.Open;
  JadikanXMLKeExcel(MyQuery1, 'c:\tested2.xml');
end;

Hasilnya, bila dibuka di Excel (saya menggunakan Excel 2007) akan ditanyakan mengenai bagaimana Excel memperlakukan file XML kita. Pilih yang pertama, As an XML Table.
Open XML_2013-03-21_01-51-48

Kemudian akan diinformasikan bahwa XML tidak memilik skema, dan Excel akan membuatnya. Klik OK.

Microsoft Office Excel_2013-03-21_01-53-08

Hasilnya dapat dilihat pada gambar di awal post ini.

 

Comments

comments

Powered by Facebook Comments