excel工具类

根据传入的list和表头Map 生成excel文件。

package com.suning.frms.utils;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.xssf.usermodel.*;

import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @Author: chenxuan
 * @Date: 2019/9/11 15:00
 */
public class ExcelUtils {

    /**
     * xls 文件生成
     */
    public static <T> HSSFWorkbook exportXls(List<T> paramList, Map<String, Object> beanMap) {
        //
        List<Map<String, Object>> mapList = BeanMapUtils.objectsToMaps(paramList);
        HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
        // 创建sheet页
        HSSFSheet sheet = hssfWorkbook.createSheet("统计表");
        // 创建表头
        createXlsTitle(sheet, beanMap);
        // 设置日期格式
        HSSFCellStyle dateStyle = hssfWorkbook.createCellStyle();
        dateStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("yyyy/mm/dd hh:mm"));
        // 创建各行数据
        for (int i = 0; i < mapList.size(); i++) {
            Map<String, Object> map = mapList.get(i);
            if (map == null) {
                continue;
            }
            HSSFRow row = sheet.createRow(i + 1);

            Set<String> set = beanMap.keySet();
            Iterator it = set.iterator();
            int j = 0;
            while (it.hasNext()) {
                String title = (String) it.next();
                row.createCell(j).setCellValue(String.valueOf(map.get(title)));
                j++;
            }
        }
        return hssfWorkbook;
    }

    /**
     * xls 创建表头
     *
     * @param sheet
     * @param beanMap
     */
    public static void createXlsTitle(HSSFSheet sheet, Map<String, Object> beanMap) {
        Set<String> set = beanMap.keySet();
        HSSFRow row = sheet.createRow(0);
        Iterator it = set.iterator();
        int i = 0;
        while (it.hasNext()) {
            HSSFCell cell = row.createCell(i);
            HSSFRichTextString text = new HSSFRichTextString((String) it.next());
            cell.setCellValue(text);
            i++;
        }
    }

    /**
     * xlsx 文件生成
     * @param paramList
     * @param beanMap
     * @param <T>
     * @return
     */
    public static <T> XSSFWorkbook exportXlsx(List<T> paramList, Map<String, Object> beanMap) {
        List<Map<String, Object>> mapList = BeanMapUtils.objectsToMaps(paramList);
        XSSFWorkbook xssfWorkbook = new XSSFWorkbook();
        // 创建sheet页
        XSSFSheet sheet = xssfWorkbook.createSheet();
        // 创建表头
        createXlsxTitle(sheet, beanMap);
        // 创建各行数据
        for (int i = 0; i < mapList.size(); i++) {
            Map<String, Object> map = mapList.get(i);
            if (map == null) {
                continue;
            }
            XSSFRow row = sheet.createRow(i + 1);

            Set<String> set = beanMap.keySet();
            Iterator it = set.iterator();
            int j = 0;
            while (it.hasNext()) {
                String title = (String) it.next();
                row.createCell(j).setCellValue(String.valueOf(map.get(title)));
                j++;
            }
        }
        return xssfWorkbook;
    }

    /**
     * xlsx 文件头
     * @param sheet
     * @param beanMap
     */
    public static void createXlsxTitle(XSSFSheet sheet, Map<String, Object> beanMap) {
        Set<String> set = beanMap.keySet();
        XSSFRow row = sheet.createRow(0);
        Iterator it = set.iterator();
        int i = 0;
        while (it.hasNext()) {
            XSSFCell cell = row.createCell(i);
            XSSFRichTextString text = new XSSFRichTextString((String) it.next());
            cell.setCellValue(text);
            i++;
        }
    }

用到的beanMap 

 
/**
 * 将List<T>转换为List<Map<String, Object>>
 *
 * @param objList
 * @return
 */
public static <T> List<Map<String, Object>> objectsToMaps(List<T> objList) {
    List<Map<String, Object>> list = new ArrayList<>();
    if (objList != null && objList.size() > 0) {
        Map<String, Object> map = null;
        T bean = null;
        for (int i = 0, size = objList.size(); i < size; i++) {
            bean = objList.get(i);
            map = beanToMap(bean);
            list.add(map);
        }
    }
    return list;
}
/**
 * 将对象装换为map
 *
 * @param bean
 * @return
 */
public static <T> Map<String, Object> beanToMap(T bean) {
    Map<String, Object> map = new HashMap<>();
    if (bean != null) {
        BeanMap beanMap = BeanMap.create(bean);
        for (Object key : beanMap.keySet()) {
            map.put(key + "", beanMap.get(key));
        }
    }
    return map;
}

后来map要求传value值为中文名称,第一行构造修改为 

/**
* xls 创建表头
*
* @param sheet
* @param beanMap
*/
public static void createXlsTitle(HSSFSheet sheet, Map<String, Object> beanMap) {
HSSFRow row = sheet.createRow(0);
int i = 0;
for(Map.Entry<String,Object> entry:beanMap.entrySet()){
HSSFCell cell = row.createCell(i);
HSSFRichTextString text = new HSSFRichTextString((String) entry.getValue());
cell.setCellValue(text);
i++;
}
}/**
* xlsx 文件头
* @param sheet
* @param beanMap
*/
public static void createXlsxTitle(XSSFSheet sheet, Map<String, Object> beanMap) {
XSSFRow row = sheet.createRow(0);
int i = 0;
for(Map.Entry<String,Object> entry:beanMap.entrySet()){
XSSFCell cell = row.createCell(i);
XSSFRichTextString text = new XSSFRichTextString((String) entry.getValue());
cell.setCellValue(text);
i++;
}
}

测试用例

Map<String, Object> param = new HashMap<>();
param.put("startIndex",0);
param.put("pageSize",100);
List<SnSystem> list = getList(param);//从数据库取出的信息

Map<String, Object> map = new HashMap<>();
map.put("systemId", "主键id");
map.put("systemNum", "系统编码");
XSSFWorkbook xssfWorkbook = ExcelUtils.exportXlsx(list,map);
try {
    response.setCharacterEncoding("UTF-8");
    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    response.setHeader("Content-Disposition", "attachment;fileName=" + System.currentTimeMillis() + ".xls");
    OutputStream outputStream = response.getOutputStream();
    xssfWorkbook.write(outputStream);
    outputStream.close();
}catch (Exception e){
    e.printStackTrace();
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值