当前位置:网站首页>POI export excle

POI export excle

2022-06-27 06:48:00 Mr_ ZhangAdd

Originally wanted to use someone else's wheel , Think or use poi, After all, others are also encapsulated poi.

Process is :

Create Workbook 、 Create sheet 、 According to the data transmitted Create lines 、 In creating cells , And the assignment  .

Last encapsulation response, Then write the output stream 、 Then refresh and output 、 When the output is finished, close the output

 /**
     *  Encode the Chinese file name downloaded from the file stream output   Shield the differences of various browser versions 
     *
     * @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<>();

        // Set file name 
        String fileName = customers.stream().collect(Collectors.joining("-"));
        // Create a workbook 
        HSSFWorkbook wb = new HSSFWorkbook();
        for (Map.Entry<String, CustomerOrderExortExcleDataDTO> entry : listMap.entrySet()) {

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

            // Create a sheet
            HSSFSheet sheet = wb.createSheet(entry.getKey());

            // Create header , If you don't skip 
            int headerrow = 0;
            List<String> headers = customerOrderExortExcleDataDTO.getColTitleList();//{" Order ID"," Delivery date "," Number "};

            if (customerOrderExortExcleDataDTO != null && customerOrderExortExcleDataDTO.getHeadTitle() != null) {
                HSSFRow row = sheet.createRow(headerrow);
                // Header style 
                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);
                // Header style 
                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++) {  // Row number 
                    HSSFRow row = sheet.createRow(headerrow);
                    List<String> rowDataList = dataList.get(i);
                    for (int j = 0; j < rowDataList.size(); j++) {  // Number of columns 
                        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();
    }

原网站

版权声明
本文为[Mr_ ZhangAdd]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/178/202206270630064118.html