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
Google+