美文网首页
POI实现的Excel导出工具类

POI实现的Excel导出工具类

作者: 快乐的小码农呀 | 来源:发表于2018-08-15 09:47 被阅读28次

这周做了一个功能,要求导出指定格式的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工具类]
 * <p>
 * <br>@author jy
 * <br>@date 2018-8-15
 * <br>@version 1.0
 * <p>
 */
public class ExcelUtil {

    /**
     * [导出excel]
     * @param excelHeader 表头
     * @param excelHeadKey 字段名
     * @param valueList List<HashMap>格式数据
     * @return
     */
    public static HSSFWorkbook exportExcel(String[] excelHeader, String[] excelHeadKey, List<Object> 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<String, String> rowMap = (Map<String, String>) 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;

    }

}

导出效果:


Excel图

相关文章

网友评论

      本文标题:POI实现的Excel导出工具类

      本文链接:https://www.haomeiwen.com/subject/nasibftx.html