Membuat File Excel Dari DataTable

Catatan saya kali ini tentang bagaimana membuat laporan dalam file excel. Kenapa saya menggunakan datatable sebagai sumber data yang akan di konversi ke excel? Tentu saja awalnya data tersimpan di database (SQL server). Karena data di database masih merupakan data mentah, maka saya perlu  merubah informasinya agar lebih komunikatif.

Dengan metode ado.net data diambil ke dataset, kemudian kita modifikasi nama-nama kolomnya agar lebih mudah dipahami pembaca. Hasil modifikasi ini disimpan dalam datatable. Disini saya tidak menuliskan bagaimana memodifikasi informasi di datatable atau dataset. Asumsikan bahwa data di datatable sudah siap untuk ditampilkan di excel.

Pertama definisikan objek baru sebagai Table. Kemudian buat header table berdasarkan nama kolom di datatable

Dim _trHeader As New TableRow()
For i As Byte = 0 To dt.Columns.Count - 1
    tc = New TableCell()
    tc.Controls.Add(New LiteralControl(dt.Columns(i).ColumnName))
    _trHeader.Cells.Add(tc)
Next
tabel.Rows.Add(_trHeader)

Kemudian, masukkan informasi/isi datatable ke table

Dim _trow As TableRow
Dim _tcell As TableCell
For i As Long = 0 To dt.Rows.Count - 1
    _trow = New TableRow()
    For a As Byte = 0 To dt.Columns.Count - 1
        _tcell = New TableCell()
        _tcell.Controls.Add(New LiteralControl(dt.Rows(i)(a)))
        _trow.Cells.Add(_tcell)
    Next
    tabel.Rows.Add(_trow)
Next

Langkah terakhir mentranfer table menjadi file excel menggunakan HttpResponse.

Berikut contoh kode selengkapnya

Protected Sub CreateExcel()
    Dim tabel As New System.Web.UI.WebControls.Table
    Dim tc As TableCell
    'asumsikan datatable tersimpan dalam session
    Dim dt As DataTable = CType(Session("_DATATABLE"), DataTable)

    'Bikin header
    Dim _trHeader As New TableRow()
    For i As Byte = 0 To dt.Columns.Count - 1
        tc = New TableCell()
        tc.Controls.Add(New LiteralControl(dt.Columns(i).ColumnName))
        _trHeader.Cells.Add(tc)
    Next
    tabel.Rows.Add(_trHeader)

    'bikin isine
    Dim _trow As TableRow
    Dim _tcell As TableCell
    For i As Long = 0 To dt.Rows.Count - 1
        _trow = New TableRow()
        For a As Byte = 0 To dt.Columns.Count - 1
            _tcell = New TableCell()
            _tcell.Controls.Add(New LiteralControl(dt.Rows(i)(a)))
            _trow.Cells.Add(_tcell)
        Next
        tabel.Rows.Add(_trow)
    Next

    Try
        Response.Clear()
        Response.AddHeader("content-disposition", "attachment;filename=Report.xls")
        Response.Charset = ""
        Response.ContentType = "application/vnd.xls"
        Dim stringWrite As System.IO.StringWriter = New System.IO.StringWriter()
        Dim htmlWrite As System.Web.UI.HtmlTextWriter = New HtmlTextWriter(stringWrite)
        tabel.RenderControl(htmlWrite)
        Response.Write(stringWrite.ToString())
        Response.End()
    Catch ex As Exception
        PesanError("Laporan dalam format Excel gagal!")
    End Try
End Sub

Semoga bermanfaat. Happy coding

About Yuniar

Penulis sekarang lebih banyak bekerja menggunakan teknologi Microsoft .NET secara umum dan TIDAK lagi menggunakan aplikasi MapXtreme.net dari MapInfo. Karena itu mohon maaf, jika pertanyaan-pertanyaan mengenai MapXtreme sudah tidak bisa saya jawab lagi.

Posted on 19 Januari 2010, in .NET and tagged , , . Bookmark the permalink. Tinggalkan komentar.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: