[Java] Membuat Laporan Excel di Aplikasi Web Based
Excel adalah salah satu format output yang disukai oleh enduser, selain dari pdf. Karena di excel pengguna bisa melakukan perhitungan-perhitungan, modifikasi ataupun kustomisasi yang lebih bebas dibandingkan dari pdf.
Di tutorial ini, akan dibahas bagaimana membuat export laporan aplikasi web-based ke format xls. Gw menggunakan library jxls (http://jxls.sourceforge.net/) karena lebih mudah dalam pembuatan format template excel jika dibandingkan dengan jasper. Konsepnya sebenarnya sederhana, sebuah servlet yang jika diinvoke dari method GET, akan meng-generate file excel dan mengirimkan ke pengguna langsung via browser.
Dimulai dengan membuat template excel yang akan kita isi dengan data (perhatikan baris ke-5), kemudian diletakkan dibawah folder WEB-INF.
Untuk sourcecodenya seperti biasa, sebuah java bean sederhana sebagai tempat untuk menampung data
package com.edw.bean; public class Mahasiswa { private String nama; private String alamat; private int usia; // jangan lupa setter dan getter-nya }
Berikut adalah servlet yang digunakan untuk meng-generate laporan berformat xcel
package com.edw.servlet; import com.edw.bean.Mahasiswa; import java.io.FileInputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.jxls.transformer.XLSTransformer; import org.apache.poi.ss.usermodel.Workbook; public class ReportServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // set output header ServletOutputStream os = response.getOutputStream(); response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-Disposition", "attachment; filename=\"report." + new SimpleDateFormat("yyyyMMdd.hhmm").format(new Date()) + ".xls\""); // ambil file excelnya ServletContext context = getServletContext(); String reportLocation = context.getRealPath("WEB-INF"); // buat data List<Mahasiswa> mahasiswas = new ArrayList<Mahasiswa>(); for (int i = 0; i < 10; i++) { Mahasiswa mahasiswa = new Mahasiswa(); mahasiswa.setNama("Edwin " + new Random().nextInt()); mahasiswa.setAlamat("Jakarta " + new Random().nextInt()); mahasiswa.setUsia(new Random().nextInt()); mahasiswas.add(mahasiswa); } // kirim ke excel Map beans = new HashMap(); beans.put("x", mahasiswas); try { XLSTransformer transformer = new XLSTransformer(); Workbook workbook = transformer.transformXLS(new FileInputStream(reportLocation + "/report.xls"), beans); workbook.write(os); } catch (Exception e) { e.printStackTrace(); } finally { os.flush(); } } }
Jangan lupa daftarkan servletnya di web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name>Reporting Excel</display-name> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>reportServlet</servlet-name> <servlet-class>com.edw.servlet.ReportServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>reportServlet</servlet-name> <url-pattern>/reportServlet</url-pattern> </servlet-mapping> </web-app>
Kemudian file jsp yang akan dijadikan sebagai halaman landing page
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h1>Download</h1> <a href="reportServlet">here</a> </body> </html>
Jika dijalankan, akan menghasilkan aplikasi web seperti ini,
Ini adalah isi file excel hasil download ketika dibuka
Berikut adalah konfigurasi dan library yang gw gunakan di Netbeans gw,
Ga terlalu sulit kan bikin laporan pakek JXLS
2 Comments
Yogi Wijaya
about 8 years agobuat saya yang lagi belajar sedikit bingung, :-) itu jxls sama jasper perbedaanya apa ya?? berarti itu intinya membuat tampilan download file xls yg kita buat
Replyedwin
about 8 years agoHi Yogi, bedanya hanya di templating, di jasper kita bikin templatenya kan via iReport / Jasper Report sedangkan di JXLS menggunakan excel sebagai templatenya, sehingga jauh lebih mudah dimodifikasi, misakanl ingin menambahkan kalkulasi atau fungsi sorting.