博客
关于我
POI导出Excel2003
阅读量:793 次
发布时间:2023-03-03

本文共 5875 字,大约阅读时间需要 19 分钟。

Java Servlet导出Excel的实现详细步骤

一、环境配置

在开始编写代码之前,需要确保开发环境的配置正确。以下是推荐的开发环境:

  • 操作系统:Windows 7及以上版本
  • JDK:Java Development Kit 6
  • IDE:MyEclipse 6.0
  • POI:Apache POI 3.8

二、POI的使用

在本项目中,我们使用了以下POI组件:

  • HSSF:用于处理Excel文件
  • HSSFCellStyle:定义单元格样式
  • HSSFFont:设置字体样式
  • HSSFRow:操作表格行
  • HSSFSheet:操作工作表
  • HSSFWorkbook:创建或读取Excel文件

三、Servlet实现

1. 导出Excel的Servlet开发

1.1 类定义

package com.project.servlet;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import com.project.bean.Basicinfo;
public class ExportExcel extends HttpServlet {
public ExportExcel() {
super();
}
public void destroy() {
super.destroy();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.ProcessRequest(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.ProcessRequest(request, response);
}
/** 导出Excel */
public void ProcessRequest(HttpServletRequest request, HttpServletResponse response) {
// 生成文件名
java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyyMMddhhmmss");
String now = format.format(new Date());
String exportFileName = "信息导出_" + now + ".xls";
List
list = getInfoList();
HSSFWorkbook workBook = null;
// 列标题
String[] cellTitle = {"序号", "姓名", "性别", "部门"};
try {
workBook = new HSSFWorkbook();
HSSFSheet sheet = workBook.createSheet();
workBook.setSheetName(0, "订单信息");
// 创建字体样式
HSSFFont font = workBook.createFont();
font.setColor(HSSFFont.COLOR_NORMAL);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
HSSFCellStyle cellStyle = workBook.createCellStyle();
cellStyle.setFont(font);
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
// 创建第一行标题
HSSFRow titleRow = sheet.createRow((short) 0);
for (int i = 0, size = cellTitle.length; i < size; i++) {
sheet.setColumnWidth(i, 4000);
HSSFCell cell = titleRow.createCell(i, 0);
cell.setCellStyle(cellStyle);
cell.setCellValue(cellTitle[i]);
}
// 写入数据
for (int i = 1; i < list.size(); i++) {
HSSFRow row = sheet.createRow((short) i);
Basicinfo entity = list.get(i);
for (int j = 0; j < cellTitle.length; j++) {
HSSFCell cell = row.createCell(j, 0);
cell.setCellStyle(cellStyle);
switch (j) {
case 0:
cell.setCellValue(String.valueOf(i));
break;
case 1:
cell.setCellValue(entity.getName());
break;
case 2:
cell.setCellValue(entity.getSex());
break;
case 3:
cell.setCellValue(entity.getDepart());
break;
}
}
}
// 设置响应头
response.setHeader("content-disposition", "attachment; filename=" + new String(exportFileName.getBytes(), "iso-8859-1"));
response.setContentType("application/vnd.ms-excel; charset=UTF-8");
// 写入工作薄内容
OutputStream outStream = response.getOutputStream();
workBook.write(outStream);
outStream.flush();
} catch (IOException e) {
System.out.println("IO异常!" + e.getMessage());
e.printStackTrace();
}
}
// 模拟数据库获取信息
public List
getInfoList() {
List
list = new ArrayList<>();
for (int i = 1; i < 101; i++) {
Basicinfo entity = new Basicinfo();
entity.setName("员工" + i);
entity.setSex(i % 2 == 1 ? "男" : "女");
entity.setDepart(i > 80 ? "销售部" : "财务部");
list.add(entity);
}
return list;
}
public void init() throws ServletException {}
}

2. BasicInfo 实体类

package com.project.bean;
public class Basicinfo {
private String name; // 姓名
private String sex; // 性别
private String depart; // 部门
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getDepart() {
return depart;
}
public void setDepart(String depart) {
this.depart = depart;
}
}

四、注意事项

  • 文件名格式:文件名采用格式 信息导出_{yyyyMMddhhmmss}.xls,确保唯一性。
  • 字体样式:统一设置字体样式(加粗、颜色),提升表格美观度。
  • 数据循环处理:通过 for 循环处理数据,确保每一行每一列的值正确对应。
  • 异常处理:对 IOException 进行捕获和处理,避免程序崩溃。
  • 五、常见问题

  • 文件大小过大:可以通过将数据源数据进行分页处理,避免一次性读取过多数据。
  • 性能优化:考虑使用 POI 的快捷写法或批量写入,提升导出效率。
  • 浏览器兼容性:部分浏览器可能会对 Excel 文件的 MIME 类型有不同要求,确保设置的 content-type 正确。
  • 六、总结

    通过以上实现,您可以轻松将 Java 后台数据导出为 Excel 文件。该实现基于标准的 ServletPOI 组件,适用于各类数据导出场景。

    转载地址:http://ykxfk.baihongyu.com/

    你可能感兴趣的文章