POI导入模板,下载表格接口

POI导入模板,下载表格接口

package com.lg.ticket.utils;

import cn.hutool.poi.excel.RowUtil;
import com.baomidou.mybatisplus.extension.api.R;
import com.lg.ticket.dto.SaleDetailDto;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.CellUtil;
import org.apache.poi.ss.util.RegionUtil;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.List;

/**
 * @author fanyuanjie
 *
 * <p> Modification History:</p >
 * <p> Date         Author         Description </p >
 * <p>-----------------------------------------</p >
 * <p> 2022/3/30      fanyuanjie    新建         </p >
 */
@Component
public class ExportExcelUtil {
    /**
    * 下载表格
    * @param response 响应
    * @param saleDetailDtoList 填充的数据
    **/
    public void exportDataExcel(HttpServletResponse response, List<SaleDetailDto> saleDetailDtoList) {
        OutputStream out = null;
        try {
            String filePath = "D:\\票据销售明细.xls";
            FileInputStream tps = new FileInputStream(new File(filePath));
            HSSFWorkbook tpWorkbook = new HSSFWorkbook(tps);
            out = response.getOutputStream();
            //弹出下载框
            response.reset();
            response.setHeader("content-disposition",
                    "attachment;filename=" + new String(("票据销售明细").getBytes("gb2312"), "ISO8859-1") + ".xls");
            response.setContentType("APPLICATION/MSEXCEL");
            // 新建一个Excel的工作空间,将模板复制到工作空间里面
            HSSFWorkbook workbook = tpWorkbook;
            //填充数据
            workbook=addData(workbook,saleDetailDtoList);
            //写出
            workbook.write(out);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                // 最后记得关闭输出流
                    response.flushBuffer();
                    if (out != null) {
                        out.flush();
                        out.close();
                        }
                } catch (final IOException e) {
                    e.printStackTrace();
                }
        }

    }

    /**
    * 填充数据
    * @param workbook 表格
    * @param saleDetailDtoList 填充的数据
    * @return 返回填充好的表格
    **/
    public static HSSFWorkbook addData(HSSFWorkbook workbook,List<SaleDetailDto> saleDetailDtoList){
        int rowNum=3;
        int size;
        boolean bool=true;
        CreationHelper createHelper = workbook.getCreationHelper();


        CellStyle cellStyleTime=workbook.createCellStyle();
        cellStyleTime.setDataFormat(
                createHelper.createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss")
        );
        cellStyleTime.setAlignment(HorizontalAlignment.LEFT);
        cellStyleTime.setVerticalAlignment(VerticalAlignment.CENTER);


        //设置对齐方式
        HSSFCellStyle left=workbook.createCellStyle();
        left.setAlignment(HorizontalAlignment.LEFT);
        left.setVerticalAlignment(VerticalAlignment.CENTER);
        HSSFCellStyle right=workbook.createCellStyle();
        right.setAlignment(HorizontalAlignment.RIGHT);
        right.setVerticalAlignment(VerticalAlignment.CENTER);

 //       HSSFCellStyle border=workbook.createCellStyle();
//        border.setBorderBottom(BorderStyle.THIN);
//        border.setBorderLeft(BorderStyle.THIN);
//        border.setBorderRight(BorderStyle.THIN);
//        border.setBorderTop(BorderStyle.THIN);

        Sheet sheet=workbook.getSheetAt(0);
        for (SaleDetailDto saleDetailDto : saleDetailDtoList) {
            size = Math.max(saleDetailDto.getSaleHandDetailDtoList().size(), saleDetailDto.getSaleTicketDetailDtoList().size());
            Row row = sheet.createRow(rowNum++);
            if (size >= 2) {
                for (int k = 0; k < 12; k++) {
                    // (4个参数,分别为起始行,结束行,起始列,结束列)
                    // 行和列都是从0开始计数,且起始结束都会合并
                    CellRangeAddress region = new CellRangeAddress(rowNum-1, rowNum + size - 2, k, k);
                    sheet.addMergedRegion(region);
                    RegionUtil.setBorderBottom(BorderStyle.MEDIUM,region,sheet);
                }
            }
            Cell cell01 = row.createCell(0);
            cell01.setCellValue(saleDetailDto.getOrderId());
            Cell cell02 = row.createCell(1);
            cell02.setCellValue(saleDetailDto.getMemberName());
            Cell cell03 = row.createCell(2);
            cell03.setCellValue(saleDetailDto.getCardId());
            Cell cell04 = row.createCell(3);
            cell04.setCellValue(saleDetailDto.getPhone());
            Cell cell05 = row.createCell(4);
            cell05.setCellValue(saleDetailDto.getVenueName());
            Cell cell06 = row.createCell(5);
            cell06.setCellStyle(right);
            cell06.setCellValue(String.valueOf(saleDetailDto.getPricePay()));
            Cell cell07 = row.createCell(6);
            cell07.setCellValue("");
            Cell cell08 = row.createCell(7);
            switch (saleDetailDto.getSource()){
                case "W" :
                    cell08.setCellValue("微信");
                    break;
                case "B" :
                    cell08.setCellValue("后台");
                    break;
                case "T" :
                    cell08.setCellValue("淘票票");
                    break;
                case "D" :
                    cell08.setCellValue("大卖网");
                    break;

            }
            Cell cell09 = row.createCell(8);
            cell09.setCellValue(saleDetailDto.getOrderState());
            switch (saleDetailDto.getOrderState()){
                case "P":
                    cell09.setCellValue("已支付");
                case "U":
                    cell09.setCellValue("未支付");
            }
            Cell cell10 = row.createCell(9);
            cell10.setCellValue(saleDetailDto.getRemark());
            Cell cell11 = row.createCell(10);
            cell11.setCellValue(saleDetailDto.getCreateName());
            Cell cell12 = row.createCell(11);
            cell12.setCellStyle(cellStyleTime);
            cell12.setCellValue(saleDetailDto.getCreateTime());
            if (saleDetailDto.getSaleTicketDetailDtoList().size() >= saleDetailDto.getSaleHandDetailDtoList().size()) {
                for (int j = 0; j < saleDetailDto.getSaleTicketDetailDtoList().size(); j++) {
                    if (j != 0) {
                        sheet.createRow(rowNum++);
                    }
                    Row rowTicket = sheet.getRow(rowNum - 1);
                    Cell cell13 = rowTicket.createCell(12);
                    cell13.setCellValue(saleDetailDto.getSaleTicketDetailDtoList().get(j).getTypeName());
                    Cell cell14 = rowTicket.createCell(13);
                    cell14.setCellStyle(right);
                    cell14.setCellValue(saleDetailDto.getSaleTicketDetailDtoList().get(j).getNum());
                    Cell cell15 = rowTicket.createCell(14);
                    cell15.setCellStyle(right);
                    cell15.setCellValue(saleDetailDto.getSaleTicketDetailDtoList().get(j).getMoney());
                    Cell cell16 = rowTicket.createCell(15);
                    cell16.setCellValue(saleDetailDto.getSaleTicketDetailDtoList().get(j).getRemark());
                    if (saleDetailDto.getSaleHandDetailDtoList().size() > j) {
                        Cell cell17 = rowTicket.createCell(16);
                        cell17.setCellValue(saleDetailDto.getSaleHandDetailDtoList().get(j).getHandId());
                        Cell cell18 = rowTicket.createCell(17);
                        cell18.setCellStyle(right);
                        cell18.setCellValue(String.valueOf(saleDetailDto.getSaleHandDetailDtoList().get(j).getDeposit()));
                        Cell cell19=rowTicket.createCell(18);
                        cell19.setCellValue(saleDetailDto.getSaleHandDetailDtoList().get(j).getHandState());
                        Cell cell20 = rowTicket.createCell(19);
                        cell20.setCellStyle(cellStyleTime);
                        cell20.setCellValue(saleDetailDto.getSaleHandDetailDtoList().get(j).getCreateTime());
                        Cell cell21 = rowTicket.createCell(20);
                        cell21.setCellStyle(cellStyleTime);
                        if (saleDetailDto.getSaleHandDetailDtoList().get(j).getReturnTime()==null){
                            cell21.setCellValue("");
                        }else {
                            cell21.setCellValue(saleDetailDto.getSaleHandDetailDtoList().get(j).getReturnTime());
                        }
                        Cell cell22 = rowTicket.createCell(21);
                        cell22.setCellValue(saleDetailDto.getSaleHandDetailDtoList().get(j).getRemark());
//                        cell17.setCellStyle(border);
//                        cell18.setCellStyle(border);
//                        cell19.setCellStyle(border);
//                        cell22.setCellStyle(border);
                    }
//                    cell13.setCellStyle(border);
//                    cell14.setCellStyle(border);
//                    cell15.setCellStyle(border);
//                    cell16.setCellStyle(border);

                }
            } else {
                for (int j = 0; j < saleDetailDto.getSaleHandDetailDtoList().size(); j++) {
                    if (j != 0) {
                        sheet.createRow(rowNum++);
                    }
                    Row rowTicket = sheet.getRow(rowNum - 1);
                    if (saleDetailDto.getSaleTicketDetailDtoList().size() > j) {
                        Cell cell13 = rowTicket.createCell(12);
                        cell13.setCellValue(saleDetailDto.getSaleTicketDetailDtoList().get(j).getTypeName());
                        Cell cell14 = rowTicket.createCell(13);
                        cell14.setCellStyle(right);
                        cell14.setCellValue(saleDetailDto.getSaleTicketDetailDtoList().get(j).getNum());
                        Cell cell15 = rowTicket.createCell(14);
                        cell15.setCellStyle(right);
                        cell15.setCellValue(saleDetailDto.getSaleTicketDetailDtoList().get(j).getMoney());
                        Cell cell16 = rowTicket.createCell(15);
                        cell16.setCellValue(saleDetailDto.getSaleTicketDetailDtoList().get(j).getRemark());
//                        cell13.setCellStyle(border);
//                        cell14.setCellStyle(border);
//                        cell15.setCellStyle(border);
//                        cell16.setCellStyle(border);

                    }
                    Cell cell17 = rowTicket.createCell(16);
                    cell17.setCellValue(saleDetailDto.getSaleHandDetailDtoList().get(j).getHandId());
                    Cell cell18 = rowTicket.createCell(17);
                    cell18.setCellStyle(right);
                    cell18.setCellValue(String.valueOf(saleDetailDto.getSaleHandDetailDtoList().get(j).getDeposit()));
                    Cell cell19=rowTicket.createCell(18);
                    cell19.setCellValue(saleDetailDto.getSaleHandDetailDtoList().get(j).getHandState());
                    Cell cell20 = rowTicket.createCell(19);
                    cell20.setCellStyle(cellStyleTime);
                    cell20.setCellValue(saleDetailDto.getSaleHandDetailDtoList().get(j).getCreateTime());
                    Cell cell21 = rowTicket.createCell(20);
                    cell21.setCellStyle(cellStyleTime);
                    if (saleDetailDto.getSaleHandDetailDtoList().get(j).getReturnTime()==null){
                        cell21.setCellValue("");
                    }else {
                        cell21.setCellValue(saleDetailDto.getSaleHandDetailDtoList().get(j).getReturnTime());
                    }
                    Cell cell22 = rowTicket.createCell(21);
                    cell22.setCellValue(saleDetailDto.getSaleHandDetailDtoList().get(j).getRemark());

//                    cell17.setCellStyle(border);
//                    cell18.setCellStyle(border);
//                    cell19.setCellStyle(border);
//                    cell22.setCellStyle(border);
                }
            }
/*只显示横向的线*/
            if (size==0){
                CellRangeAddress cellRangeAddress=new CellRangeAddress(rowNum-1, rowNum-1,0,21);
                RegionUtil.setBorderBottom(BorderStyle.THIN,cellRangeAddress,sheet);
                RegionUtil.setBottomBorderColor(IndexedColors.BLACK.getIndex(),cellRangeAddress,sheet);
                RegionUtil.setBorderLeft(BorderStyle.THIN,cellRangeAddress,sheet);
                RegionUtil.setLeftBorderColor(IndexedColors.BLACK.getIndex(),cellRangeAddress,sheet);
                RegionUtil.setBorderTop(BorderStyle.THIN,cellRangeAddress,sheet);
                RegionUtil.setTopBorderColor(IndexedColors.BLACK.getIndex(),cellRangeAddress,sheet);
                RegionUtil.setBorderRight(BorderStyle.THIN,cellRangeAddress,sheet);
                RegionUtil.setRightBorderColor(IndexedColors.BLACK.getIndex(),cellRangeAddress,sheet);
            }else {
                CellRangeAddress cellRangeAddress=new CellRangeAddress(rowNum-size, rowNum-1 ,0,21);
                RegionUtil.setBorderBottom(BorderStyle.THIN,cellRangeAddress,sheet);
                RegionUtil.setBottomBorderColor(IndexedColors.BLACK.getIndex(),cellRangeAddress,sheet);
                RegionUtil.setBorderLeft(BorderStyle.THIN,cellRangeAddress,sheet);
                RegionUtil.setLeftBorderColor(IndexedColors.BLACK.getIndex(),cellRangeAddress,sheet);
                RegionUtil.setBorderTop(BorderStyle.THIN,cellRangeAddress,sheet);
                RegionUtil.setTopBorderColor(IndexedColors.BLACK.getIndex(),cellRangeAddress,sheet);
                RegionUtil.setBorderRight(BorderStyle.THIN,cellRangeAddress,sheet);
                RegionUtil.setRightBorderColor(IndexedColors.BLACK.getIndex(),cellRangeAddress,sheet);
            }
            if (size==0){
                for (int k = 0; k < 12; k++) {
                    // (4个参数,分别为起始行,结束行,起始列,结束列)
                    // 行和列都是从0开始计数,且起始结束都会合并
                    CellRangeAddress region = new CellRangeAddress(rowNum-1, rowNum-1, k, k);
                    RegionUtil.setBorderBottom(BorderStyle.THIN,region,sheet);
                    RegionUtil.setBorderLeft(BorderStyle.THIN,region,sheet);
                    RegionUtil.setBorderTop(BorderStyle.THIN,region,sheet);
                    RegionUtil.setBorderRight(BorderStyle.THIN,region,sheet);
                }
            }else{
                for (int k = 0; k < 12; k++) {
                    // (4个参数,分别为起始行,结束行,起始列,结束列)
                    // 行和列都是从0开始计数,且起始结束都会合并
                    CellRangeAddress region = new CellRangeAddress(rowNum-size, rowNum-1, k, k);
                    RegionUtil.setBorderBottom(BorderStyle.THIN,region,sheet);
                    RegionUtil.setBorderLeft(BorderStyle.THIN,region,sheet);
                    RegionUtil.setBorderTop(BorderStyle.THIN,region,sheet);
                    RegionUtil.setBorderRight(BorderStyle.THIN,region,sheet);
                }
            }

        }
        return workbook;
    }
}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值