poi导出excle

原本想使用别人的轮子,想想还是使用poi,毕竟别人也是封装poi。

过程就是:

创建工作簿、创建工作表、根据传来的数据 创建行、在创建单元格,并赋值 。

最后 封装response,然后写入输出流、然后刷新并输出、输出完毕关闭输出

 /**
     * 对文件流输出下载的中文文件名进行编码 屏蔽各种浏览器版本的差异性
     *
     * @throws UnsupportedEncodingException
     */
    public static String encodeChineseDownloadFileName(
            HttpServletRequest request, String pFileName) throws Exception {

        String filename = null;
        String agent = request.getHeader("USER-AGENT");
        if (null != agent) {
            if (-1 != agent.indexOf("Firefox")) {//Firefox
                filename = "=?UTF-8?B?" + (new String(org.apache.commons.codec.binary.Base64.encodeBase64(pFileName.getBytes("UTF-8")))) + "?=";
            } else if (-1 != agent.indexOf("Chrome")) {//Chrome
                filename = new String(pFileName.getBytes(), "ISO8859-1");
            } else {//IE7+
                filename = java.net.URLEncoder.encode(pFileName, "UTF-8");
                filename = filename.replace("+", "%20");
            }
        } else {
            filename = pFileName;
        }
        return filename;
    }
    public static void exportCustomerGoodsTotalByMonth(HttpServletRequest request,
                                                       HttpServletResponse response,
                                                       Company company,
                                                       List<String> customers,
                                                       Map<String, CustomerOrderExortExcleDataDTO> listMap
    ) throws IOException {

        List<Map<String, Object>> list = new ArrayList<>();

        //设置文件名
        String fileName = customers.stream().collect(Collectors.joining("-"));
        //创建一个工作薄
        HSSFWorkbook wb = new HSSFWorkbook();
        for (Map.Entry<String, CustomerOrderExortExcleDataDTO> entry : listMap.entrySet()) {

            CustomerOrderExortExcleDataDTO customerOrderExortExcleDataDTO = entry.getValue();
            List<List<String>> dataList = customerOrderExortExcleDataDTO.getDataList();

            //创建一个sheet
            HSSFSheet sheet = wb.createSheet(entry.getKey());

            //创建表头,如果没有跳过
            int headerrow = 0;
            List<String> headers = customerOrderExortExcleDataDTO.getColTitleList();//{"订单ID","发货日期","数量"};

            if (customerOrderExortExcleDataDTO != null && customerOrderExortExcleDataDTO.getHeadTitle() != null) {
                HSSFRow row = sheet.createRow(headerrow);
                //表头样式
                HSSFCellStyle style = wb.createCellStyle();
                HSSFFont font = wb.createFont();
                font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
                font.setFontName(excelfont);
                font.setFontHeightInPoints((short) 11);
                style.setFont(font);
                style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
                style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
                style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
                style.setBorderRight(HSSFCellStyle.BORDER_THIN);
                style.setBorderTop(HSSFCellStyle.BORDER_THIN);

                HSSFCell cell = row.createCell(0);
                cell.setCellValue(customerOrderExortExcleDataDTO.getHeadTitle());
                cell.setCellStyle(style);

                HSSFCell cell2 = row.createCell(headers.size() - 1);
                cell2.setCellStyle(style);

                sheet.addMergedRegion(new CellRangeAddress(
                        0, //first row (0-based)
                        0, //last row  (0-based)
                        0, //first column (0-based)
                        headers.size() - 1  //last column  (0-based)
                ));
                headerrow++;
            }

            if (headers != null) {
                HSSFRow row = sheet.createRow(headerrow);
                //表头样式
                HSSFCellStyle style = wb.createCellStyle();
                HSSFFont font = wb.createFont();
                font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
                font.setFontName(excelfont);
                font.setFontHeightInPoints((short) 11);
                style.setFont(font);
                style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
                style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
                style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
                style.setBorderRight(HSSFCellStyle.BORDER_THIN);
                style.setBorderTop(HSSFCellStyle.BORDER_THIN);
                for (int i = 0; i < headers.size(); i++) {
                    if (i == 0) {
                        sheet.setColumnWidth(i, 450 * 10);
                    } else {
                        sheet.setColumnWidth(i, 350 * 10);
                    }
                    HSSFCell cell = row.createCell(i);
                    cell.setCellValue(headers.get(i));
                    cell.setCellStyle(style);
                }

                headerrow++;
            }
            if (!ObjectUtils.isEmpty(dataList)) {
                HSSFCellStyle style = wb.createCellStyle();
                HSSFFont font = wb.createFont();
                font.setFontName(excelfont);
                font.setFontHeightInPoints((short) 10);
                style.setFont(font);
                style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
                style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
                style.setBorderRight(HSSFCellStyle.BORDER_THIN);
                style.setBorderTop(HSSFCellStyle.BORDER_THIN);

                style.setAlignment(HSSFCellStyle.ALIGN_LEFT);
                for (int i = 0; i < dataList.size(); i++) {  //行数
                    HSSFRow row = sheet.createRow(headerrow);
                    List<String> rowDataList = dataList.get(i);
                    for (int j = 0; j < rowDataList.size(); j++) {  //列数
                        HSSFCell cell = row.createCell(j);
                        cell.setCellValue(rowDataList.get(j) + "");
                        cell.setCellStyle(style);
                    }
                    headerrow++;
                }
            }

        }
        fileName = fileName + ".xls";
        String filename = "";
        try {
            filename = encodeChineseDownloadFileName(request, fileName);
        } catch (Exception e) {
            e.printStackTrace();
        }
        response.reset();
        response.setHeader("Content-disposition", filename);
        response.setContentType("application/vnd.ms-excel");
        response.setHeader("Content-disposition", "attachment;filename=" + filename);
        response.setHeader("Pragma", "No-cache");

        OutputStream ouputStream = response.getOutputStream();
        wb.write(ouputStream);
        ouputStream.flush();
        ouputStream.close();
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值