POI实现的Excel导出工具类

这周做了一个功能,要求导出指定格式的Excel表,虽然没有公式,单元格数据类型等复杂,但是字段来源于不同的表中,记录一下,方便以后使用:

  • 这里传入数据时,使用了org.apache.commons.beanutils.BeanUtils.describe方法将bean 转为Map,存到了集合中。
  • 由于表头是固定顺序且不存在于一个表中,所以传入了表头的字段名数组,所有数据存储在valueList中的map中,根据excelHeadKey的顺序打印。
package com.lnlic.credit.platform.utils;

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 org.apache.poi.hssf.util.HSSFColor;

import java.util.List;
import java.util.Map;

/**
 * [Excel工具类]
 * 

*
@author jy *
@date 2018-8-15 *
@version 1.0 *

*/ public class ExcelUtil { /** * [导出excel] * @param excelHeader 表头 * @param excelHeadKey 字段名 * @param valueList List格式数据 * @return */ public static HSSFWorkbook exportExcel(String[] excelHeader, String[] excelHeadKey, List valueList) { // 基本变量初始化 HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); HSSFSheet hssfSheet = hssfWorkbook.createSheet("sheet1"); HSSFRow headerRow = hssfSheet.createRow(0); HSSFCellStyle headCellStyle = hssfWorkbook.createCellStyle(); HSSFCellStyle dataCellStyle = hssfWorkbook.createCellStyle(); int columnNum = excelHeader.length; // 样式设置 headCellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); headCellStyle.setFillForegroundColor(HSSFColor.SKY_BLUE.index); headCellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); headCellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); headCellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); headCellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); headCellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); dataCellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); dataCellStyle.setFillForegroundColor(HSSFColor.LIGHT_GREEN.index); dataCellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); dataCellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); dataCellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); dataCellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); dataCellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); headerRow.setHeightInPoints(20); HSSFFont font = hssfWorkbook.createFont(); font.setFontHeightInPoints((short) 12); headCellStyle.setFont(font); // 打印表头 for (int i = 0; i < columnNum; i++) { HSSFCell headerCell = headerRow.createCell(i); headerCell.setCellValue(excelHeader[i]); headerCell.setCellStyle(headCellStyle); //根据表头长度设置单元格宽度 hssfSheet.setColumnWidth(i, excelHeader[i].getBytes().length * 2 * 180); } // 打印数据行 for (int i = 0; i < valueList.size(); i++) { HSSFRow dataRow = hssfSheet.createRow(i + 1); dataRow.setHeightInPoints(20); Map rowMap = (Map) valueList.get(i); for (int j = 0; j < excelHeader.length; j++) { HSSFCell dataCell = dataRow.createCell(j); String rowVal = rowMap.get(excelHeadKey[j]); //无数据补空格,避免后续单元格无数据而使数据溢出单元格 if (rowVal == "" || rowVal == null) { rowVal = " "; } dataCell.setCellValue(rowVal); dataCell.setCellStyle(dataCellStyle); } } return hssfWorkbook; } }

导出效果:


POI实现的Excel导出工具类_第1张图片
Excel图

你可能感兴趣的:(POI实现的Excel导出工具类)