场景:要求利用Excel把报表的数据导出到本地计算机。
Javaweb生成Excel表格有很多种技术,我选择了POI技术进行Excel表格的导入导出。选择POI是因为它兼容了office2007以上的版本和简便的操作性。
在此通过简单的例子说明如何利用POI生成一个表格,在表格里面简单填写一些内容,并通过客户端下载生成的Excel表格。
首先要搭建好一个javaweb的编程环境,下载POI的jar包。详细的步骤请参考:POI教程
public class PoiServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//创建一个工作簿
XSSFWorkbook workbook = new XSSFWorkbook();
// 创建一个电子表
XSSFSheet sheet = workbook.createSheet("Employee Info");
//创建一个row对象
XSSFRow row;
//创建一个map对象,输入内容并把内容填写到生成的电子表中
Map<String, Object[]> empinfo = new TreeMap<String, Object[]>();
empinfo.put("1", new Object[] { "EMP ID", "EMP NAME", "DESIGNATION" });
empinfo.put("2", new Object[] { "tp01", "Gopal", "Technical Manager" });
empinfo.put("3", new Object[] { "tp02", "Gopal", "Technical Manager" });
empinfo.put("4", new Object[] { "tp02", "Gopal", "Technical Manager" });
Set<String> keyid = empinfo.keySet();
int rowid = 0;
for (String key : keyid) {
row = sheet.createRow(rowid++);
Object[] objectArr = empinfo.get(key);
int cellid = 0;
for (Object obj : objectArr) {
Cell cell = row.createCell(cellid++);
cell.setCellValue((String) obj);
}
}
//创建下载时的文件名称,我们这里创建一个可读性强的文件名
String fileName = "学生成绩表.xlsx";
//因为创建的文件名是包含中文,我们需要进行编码转换
fileName = new String(fileName.getBytes("GBK"), "ISO-8859-1");
//设置响应头的内容
response.setContentType("application/vnd.ms-excel");
//设置content-disposition响应头,使我们下载的时候可以显示我们所设置的文件名称跟类型
response.setHeader("content-disposition", "attachment;filename="
+ fileName);
//利用response创建一个输出流
OutputStream outputStream = response.getOutputStream();
// 利用POI中的方法把Excel电子表写入到输出流中
workbook.write(outputStream);
//刷新输出流
outputStream.flush();
//关闭输出流
outputStream.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
上面的例子简单的展示了如何创建一个Excel电子表格,并通过客户端下载生成的Excel电子表格。