easypoi导出导入数据

工具类

package com.pig4cloud.pigx.e_ticket.Utils.ExcelUtils;

import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.beans.PropertyDescriptor;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
/**
 * @Author DLG
 * @Date 2020/10/16 14:27
 */
public class ExcelUtil {
    public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass,String fileName,boolean isCreateHeader, HttpServletResponse response){
    ExportParams exportParams = new ExportParams(title, sheetName);
    exportParams.setCreateHeadRows(isCreateHeader);
    defaultExport(list, pojoClass, fileName, response, exportParams);

}
    public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass,String fileName, HttpServletResponse response){
        defaultExport(list, pojoClass, fileName, response, new ExportParams(title, sheetName));
    }

    public static void exportExcel(List<Map<String, Object>> list, String fileName, HttpServletResponse response){
        defaultExport(list, fileName, response);
    }

    private static void defaultExport(List<?> list, Class<?> pojoClass, String fileName, HttpServletResponse response, ExportParams exportParams) {
        Workbook workbook = ExcelExportUtil.exportExcel(exportParams,pojoClass,list);
        if (workbook != null);
        downLoadExcel(fileName, response, workbook);
    }

    public static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) {
        try {
            response.setCharacterEncoding("UTF-8");
            response.setHeader("content-Type", "application/vnd.ms-excel");
            response.setHeader("Content-Disposition",URLEncoder.encode(fileName, "UTF-8"));
            workbook.write(response.getOutputStream());
        } catch (IOException e) {
            //throw new NormalException(e.getMessage());
            e.printStackTrace();
        }
    }

    private static void defaultExport(List<Map<String, Object>> list, String fileName, HttpServletResponse response) {
        Workbook workbook = ExcelExportUtil.exportExcel(list, ExcelType.HSSF);
        if (workbook != null);
        downLoadExcel(fileName, response, workbook);
    }

    public static <T> List<T> importExcel(String filePath,Integer titleRows,Integer headerRows, Class<T> pojoClass){
        if (StringUtils.isBlank(filePath)){
            return null;
        }
        ImportParams params = new ImportParams();
        params.setTitleRows(titleRows);
        params.setHeadRows(headerRows);
        List<T> list = null;
        try {
            list = ExcelImportUtil.importExcel(new File(filePath), pojoClass, params);
        }catch (NoSuchElementException e){
            //throw new NormalException("模板不能为空");
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
            //throw new NormalException(e.getMessage());
        }
        return list;
    }
    public static <T> List<T> importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class<T> pojoClass){
        if (file == null){
            return null;
        }
        ImportParams params = new ImportParams();
        params.setTitleRows(titleRows);
        params.setHeadRows(headerRows);
        List<T> list = null;
        try {
            list = ExcelImportUtil.importExcel(file.getInputStream(), pojoClass, params);
        }catch (NoSuchElementException e){
            // throw new NormalException("excel文件不能为空");
            e.printStackTrace();
        } catch (Exception e) {
            //throw new NormalException(e.getMessage());
            e.printStackTrace();
        }
        return list;
    }
    /**
     * 得到Workbook对象
     * @param file
     * @return
     * @throws IOException
     */
    public static Workbook getWorkBook(MultipartFile file) throws IOException{
        //这样写  excel 能兼容03和07
        InputStream is = file.getInputStream();
        Workbook hssfWorkbook = null;
        try {
            hssfWorkbook = new HSSFWorkbook(is);
        } catch (Exception ex) {
            is =file.getInputStream();
            hssfWorkbook = new XSSFWorkbook(is);
        }
        return hssfWorkbook;
    }

    /**
     * 得到错误信息
     * @param sb
     * @param list
     * @param i
     * @param obj
     * @param name  用哪个属性名去表明不和规定的数据
     * @param msg
     * @throws Exception
     */
    public static void getWrongInfo(StringBuilder sb,List list,int i,Object obj,String name,String msg) throws Exception{
        Class clazz=obj.getClass();
        Object str=null;
        //得到属性名数组
        Field[] fields = clazz.getDeclaredFields();
        for(Field f : fields){
            if(f.getName().equals(name)){
                //用来得到属性的get和set方法
                PropertyDescriptor pd = new PropertyDescriptor(f.getName(), clazz);
                //得到get方法
                Method getMethod=pd.getReadMethod();
                str = getMethod.invoke(obj);
            }
        }
        if(i==0) {
            sb.append(msg + str + ";");
        }
        else if(i==(list.size()-1)) {
            sb.append(str + "</br>");
        }
        else {
            sb.append(str + ";");
        }
    }
}

调用方式

package com.pig4cloud.pigx.e_ticket.controller;

import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import com.pig4cloud.pigx.e_ticket.Utils.ExcelUtils.ExcelUtil;
import com.pig4cloud.pigx.e_ticket.Utils.MoneyUtil;
import com.pig4cloud.pigx.e_ticket.Utils.MonthUtil;
import com.pig4cloud.pigx.e_ticket.entity.BusinessTicketRecognition;
import com.pig4cloud.pigx.e_ticket.service.BusinessTicketRecognitionService;
import com.pig4cloud.pigx.e_ticket.service.CompanyDetailService;
import com.pig4cloud.pigx.e_ticket.service.FeedPieceManageService;
import com.pig4cloud.pigx.e_ticket.service.FinancialOperationService;
import com.pig4cloud.pigx.e_ticket.vo.CompanyDetailVo;
import com.pig4cloud.pigx.e_ticket.vo.FeedPieceVo;
import com.pig4cloud.pigx.e_ticket.vo.OrderVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.text.ParseException;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @Author DLG
 * @Date 2020/11/26 11:50
 */
@RestController
@Slf4j
@RequestMapping("/export")
public class ExportController {

    @Autowired
    private BusinessTicketRecognitionService businessTicketRecognitionService;
    @Autowired
    private FinancialOperationService financialOperationService;
    @Autowired
    private CompanyDetailService companyDetailService;
    @Autowired
    private FeedPieceManageService feedPieceManageService;

    /**
     * 订单Excel导出
     */
    @RequestMapping("exportOrderExcel")
    public void exportExcel(HttpServletResponse response) {
        List<OrderVo> list = businessTicketRecognitionService.getExcelList();
        for (OrderVo orderVo : list) {
            orderVo.setNum(list.indexOf(orderVo) + 1);
            orderVo.setDuration(orderVo.getMaturityDate().toEpochDay() - orderVo.getCreateTime().toEpochDay() + 1);
            if (orderVo.getRedemptionVoucherStatus() == null || orderVo.getRedemptionVoucherStatus() != 1) {
                orderVo.setInsuredBalance(orderVo.getTicketMoney());
            } else {
                orderVo.setInsuredBalance(new BigDecimal(0));
            }
            BigDecimal payAmount = financialOperationService.getCount(orderVo.getHoldTicketName());
            orderVo.setActualPremium(payAmount);
        }
        // 创建参数对象
        ExportParams exportParams = new ExportParams();
        // 设置sheet得名称
        exportParams.setSheetName("订单统计信息");
        // 执行方法
        Workbook workbook = ExcelExportUtil.exportExcel(exportParams, OrderVo.class, list);
        ExcelUtil.downLoadExcel("订单统计信息" + ".xls", response, workbook);
    }

    /**
     * 到期日Excel导出
     */
    @RequestMapping("exportExpiryDateExcel")
    public void exportExpiryDateExcel(HttpServletResponse response) {
        List<BusinessTicketRecognition> list = businessTicketRecognitionService.list();
        //导出操作
        ExcelUtil.exportExcel(list, null, "到期日统计", BusinessTicketRecognition.class, "到期日统计.xls", response);
    }

    /**
     * 集团详情Excel导出
     */
    @RequestMapping("exportCompanyExcel")
    public void exportCompanyExcel(HttpServletResponse response) {

        List<CompanyDetailVo> list = companyDetailService.getList();
        Map<String, List<CompanyDetailVo>> resultList = null;
        try {
            resultList = list.stream().collect(Collectors.groupingBy(CompanyDetailVo::getParentCompany));
        } catch (Exception e) {
            log.info("无法分组!借款记录为空");
        }
        List<CompanyDetailVo> list1 = new ArrayList<>();
        if (resultList != null) {
            for (Map.Entry<String, List<CompanyDetailVo>> entry : resultList.entrySet()) {
                List<CompanyDetailVo> value = entry.getValue();
                //拒付笔数
                BigDecimal refuseNumRate = new BigDecimal(0);
                BigDecimal refuseMoneyRate = new BigDecimal(0);
                BigDecimal acceptanceSingeMoney = new BigDecimal(0);
                BigDecimal settleSingeMoney = new BigDecimal(0);
                BigDecimal outstandSingeMoney = new BigDecimal(0);
                BigDecimal refuseSingeMoney = new BigDecimal(0);
                BigDecimal usedMoney = new BigDecimal(0);
                for (CompanyDetailVo companyDetailVo : value) {
                    refuseNumRate = refuseNumRate.add(companyDetailVo.getRefuseNumRate());
                    refuseMoneyRate = refuseMoneyRate.add(companyDetailVo.getRefuseMoneyRate());
                    acceptanceSingeMoney = acceptanceSingeMoney.add(companyDetailVo.getAcceptanceSingeMoney());
                    settleSingeMoney = settleSingeMoney.add(companyDetailVo.getSettleSingeMoney());
                    outstandSingeMoney = outstandSingeMoney.add(companyDetailVo.getOutstandSingeMoney());
                    refuseSingeMoney = refuseSingeMoney.add(companyDetailVo.getRefuseSingeMoney());
                    usedMoney = usedMoney.add(companyDetailVo.getUsedMoney());
                }
                CompanyDetailVo companyDetailVo = new CompanyDetailVo();
                companyDetailVo.setParentCompany("合计");
                companyDetailVo.setRefuseNumRate(refuseNumRate);
                companyDetailVo.setRefuseMoneyRate(refuseMoneyRate);
                companyDetailVo.setAcceptanceSingeMoney(acceptanceSingeMoney);
                companyDetailVo.setSettleSingeMoney(settleSingeMoney);
                companyDetailVo.setOutstandSingeMoney(outstandSingeMoney);
                companyDetailVo.setRefuseSingeMoney(refuseSingeMoney);
                companyDetailVo.setUsedMoney(usedMoney);
                value.add(companyDetailVo);
                list1.addAll(value);
            }
            //导出操作
            ExcelUtil.exportExcel(list1, null, "分集团统计", CompanyDetailVo.class, "分集团统计.xls", response);
        }

    }

    /**
     * 进件详情Excel导出
     */
    @RequestMapping("exportFeedPieceExcel")
    public void exportFeedPieceExcel(HttpServletResponse response) {
        List<FeedPieceVo> list = feedPieceManageService.getList();
        for (FeedPieceVo feedPieceVo : list) {
            feedPieceVo.setTotal(feedPieceVo.getTicketMoney());
            //获取当年时间的月份
            LocalDate now = LocalDate.now();
            List<String> monthBetween = new ArrayList<>();
            try {
                monthBetween = MonthUtil.getMonthBetween(feedPieceVo.getIssueDate() + "", feedPieceVo.getMaturityDate() + "");
            } catch (ParseException e) {
                e.printStackTrace();
            }
            if (feedPieceVo.getConfirmedYear() == null) {
                feedPieceVo.setConfirmedYear(new BigDecimal(0));
            }
            //算出每月的平均钱数
            BigDecimal divide = feedPieceVo.getEstimatedPremium().divide(new BigDecimal(monthBetween.size()), 2, BigDecimal.ROUND_HALF_UP);
            feedPieceVo.setConfirmedMonth(divide);
            for (String s : monthBetween) {
                //当年开头的月数
                if (s.startsWith(now.getYear() + "")) {
                    String[] split = s.split("-");
                    switch (split[1]) {
                        case "01":
                            feedPieceVo.setJanuary(divide);
                            feedPieceVo.setConfirmedYear(feedPieceVo.getConfirmedYear().add(divide));
                            break;
                        case "02":
                            feedPieceVo.setFebruary(divide);
                            feedPieceVo.setConfirmedYear(feedPieceVo.getConfirmedYear().add(divide));
                            break;
                        case "03":
                            feedPieceVo.setMarch(divide);
                            feedPieceVo.setConfirmedYear(feedPieceVo.getConfirmedYear().add(divide));
                            break;
                        case "04":
                            feedPieceVo.setApril(divide);
                            feedPieceVo.setConfirmedYear(feedPieceVo.getConfirmedYear().add(divide));
                            break;
                        case "05":
                            feedPieceVo.setMay(divide);
                            feedPieceVo.setConfirmedYear(feedPieceVo.getConfirmedYear().add(divide));
                            break;
                        case "06":
                            feedPieceVo.setJune(divide);
                            feedPieceVo.setConfirmedYear(feedPieceVo.getConfirmedYear().add(divide));
                            break;
                        case "07":
                            feedPieceVo.setJuly(divide);
                            feedPieceVo.setConfirmedYear(feedPieceVo.getConfirmedYear().add(divide));
                            break;
                        case "08":
                            feedPieceVo.setAugust(divide);
                            feedPieceVo.setConfirmedYear(feedPieceVo.getConfirmedYear().add(divide));
                            break;
                        case "09":
                            feedPieceVo.setSeptember(divide);
                            feedPieceVo.setConfirmedYear(feedPieceVo.getConfirmedYear().add(divide));
                            break;
                        case "10":
                            feedPieceVo.setOctober(divide);
                            feedPieceVo.setConfirmedYear(feedPieceVo.getConfirmedYear().add(divide));
                            break;
                        case "11":
                            feedPieceVo.setNovember(divide);
                            feedPieceVo.setConfirmedYear(feedPieceVo.getConfirmedYear().add(divide));
                            break;
                        case "12":
                            feedPieceVo.setDecember(divide);
                            feedPieceVo.setConfirmedYear(feedPieceVo.getConfirmedYear().add(divide));
                            break;
                    }
                }
            }
        }
        //导出操作
        ExcelUtil.exportExcel(list, null, "进件统计", FeedPieceVo.class, "进件统计.xls", response);
    }
}

实体类

 @Excel(name = "是否为xx" ,orderNum = "8",replace = {"是_1","否_0"})//替换

 @Excel(name = "xx" ,orderNum = "0",width = 40,mergeVertical = true)//纵向合并

 @Excel(name = "xx",orderNum = "18",isStatistics = true)//最后添加合计

依赖

<!--文件导入导出-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>4.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>4.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>ooxml-schemas</artifactId>
            <version>1.4</version>
        </dependency>
<!--easypoi-->
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-base</artifactId>
            <version>4.1.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-web</artifactId>
            <version>4.1.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-annotation</artifactId>
            <version>4.1.0</version>
        </dependency>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容