本文共 5875 字,大约阅读时间需要 19 分钟。
在开始编写代码之前,需要确保开发环境的配置正确。以下是推荐的开发环境:
在本项目中,我们使用了以下POI组件:
HSSF:用于处理Excel文件HSSFCellStyle:定义单元格样式HSSFFont:设置字体样式HSSFRow:操作表格行HSSFSheet:操作工作表HSSFWorkbook:创建或读取Excel文件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 {}} 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 的快捷写法或批量写入,提升导出效率。content-type 正确。通过以上实现,您可以轻松将 Java 后台数据导出为 Excel 文件。该实现基于标准的 Servlet 和 POI 组件,适用于各类数据导出场景。
转载地址:http://ykxfk.baihongyu.com/