POI对List数据导出Excel

------------------------------封装类---------------------------

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 导出帮助类:使用此类需要配合@ExportBean注解
 */
public class ExcelExportUtil {
    private ExcelDataStrategy excelDataStrategy;

    public ExcelExportUtil() {

    }

    public ExcelExportUtil(ExcelDataStrategy excelDataStrategy) {
        this.excelDataStrategy = excelDataStrategy;
    }


    /**
     * 导出方法
     *
     * @param response
     * @param fileName 导出的文件名
     * @param beanList 导出的数据
     * @param metaMap  元信息 clazz类对象,columnNames字段名String[],columnWidth列宽Integer[],columnComment列名String[]
     */
    public void exportBean(HttpServletResponse response, String fileName, List beanList, Map<String, Object> metaMap) throws Exception {
        try {

            Map<String, Object> objectMap = excelDataStrategy.getExcelDataMap(beanList, metaMap);

            String[] columnComments = (String[]) objectMap.get("columnComment");
            //列宽
            Integer[] excelHeaderWidth = (Integer[]) objectMap.get("columnWidth");
            //数据列
            Map<Integer, List<String>> dataMap = (Map<Integer, List<String>>) objectMap.get("data");
//            XSSFWorkbook xssfWorkbook = new XSSFWorkbook();

            // keep 100 rows in memory, exceeding rows will be flushed to disk
            SXSSFWorkbook wb = new SXSSFWorkbook(100);
            Sheet sheet = wb.createSheet();
            sheet.setDefaultRowHeight((short) 300);

            // 设置列宽度
            if (excelHeaderWidth != null && excelHeaderWidth.length > 0) {

                for (int i = 0; i < excelHeaderWidth.length; i++) {
                    sheet.setColumnWidth(i, 32 * excelHeaderWidth[i]);
                }
            } else {//默认宽度
                for (int i = 0; i < columnComments.length; i++) {
                    sheet.setColumnWidth(i, 32 * 250);
                }
            }
            // 标题
            Cell cell;
            //列名
            String[] cells = columnComments;
            Row titleRow = sheet.createRow(0);
            for (int i = 0; i <= cells.length - 1; i++) {
                cell = titleRow.createCell((short) i);
                cell.setCellValue(cells[i]);
            }

            CellStyle cellStyle = wb.createCellStyle();
            wb.createCellStyle();
            DataFormat format = wb.createDataFormat();
            cellStyle.setDataFormat(format.getFormat("@"));
            Set<Map.Entry<Integer, List<String>>> entrySet = dataMap.entrySet();
            int size = entrySet.size();

            for (int i = 1; i <= size; i++) {
                Row dataRow = sheet.createRow(i);
                List<String> dList = dataMap.get(i);
                for (int j = 0; j < dList.size(); j++) {
                    cell = dataRow.createCell(j);
                    cell.setCellStyle(cellStyle);
                    cell.setCellValue(dList.get(j));
                }
            }
            response.setContentType("application/vnd.ms-excel");
            String name = fileName + System.currentTimeMillis() + ".xlsx";
            String filename = "\"" + new String(name.getBytes(), "iso-8859-1") + "\"";
            response.addHeader("Content-Disposition", "attachment; filename=" + filename);
            wb.write(response.getOutputStream());
//            wb.dispose();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {

        }
    }
}

 

------------------------------调用---------------------------

 

@RequestMapping("export")
@ResponseBody
public Map<String, Object> export(HttpServletResponse response) throws Exception {
   Map<String, Object> resMap = new HashMap<String, Object>();
   String statusCode = "200", message = "导出成功";
   String[] columnNameArr = {"materialName", "materialModel","manufacturer","enterNumber","batchNumber","enterTime"};  //数据库中的字段名
   String fileName = "物料管理";
   Map<String, Object> metaMap = new HashMap<>();
   String[] columnComment = {"物料名称", "型号规格","生产厂家","进场数量","批号","进场时间"};  //Excel中的第一行
   Integer[] columnWidth = {250, 250, 250};        //列宽     
   metaMap.put("columnName", columnNameArr);
   metaMap.put("columnWidth", columnWidth);
   metaMap.put("columnComment", columnComment);
   ExcelExportUtil excelExportUtil = new ExcelExportUtil(new ExcelDataNormalStrategy());
   try {
      excelExportUtil.exportBean(response, fileName, (List) ****, metaMap);//response、filename、数组list、map
   } catch (Exception e) {
      statusCode = "300";
      message = "导出失败";
      e.printStackTrace();
   }
   resMap.put("statusCode",statusCode);
   resMap.put("message",message);
   return resMap;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值