若依前后端分离_导出Excel表头信息提示模板

前些日子要在原有的Excel基础上搞一个多标题的模板提示输入的信息,废话不多说上图上代码:
首先修改 ExcelUtil.java
加入以下代码

	    /**
     * 多个 标题
     */
    private String[] titles;
    
    /**
     * 多个 标题 1
     * @param list 集合打印 内容
     * @param sheetName sheet名称
     * @param titles 标题 名称
     */
    public void exportExcel(HttpServletResponse response, List<T> list, String sheetName, String[] titles)
    {
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        this.init(list, sheetName, titles, Type.EXPORT);
        exportExcel(response);
    }

    /**
     * 多个 标题 2
     * @param list 集合打印 内容
     * @param sheetName sheet名称
     * @param titles 标题 名称
     * @param type 导入 或 导出
     */
    public void init(List<T> list, String sheetName, String[] titles, Type type)
    {
        if (list == null)
        {
            list = new ArrayList<T>();
        }
        this.list = list;
        this.sheetName = sheetName;
        this.type = type;
        this.titles = titles;
        createExcelField();
        createWorkbook();
        createTitle();
        createSubHead();
    }
    /**
     * 创建excel第一 或 多行 行标题
     */
    public void createTitle() {
        CellStyle titless = wb.createCellStyle();
        titless.cloneStyleFrom(styles.get("title"));
        //标题 自动换行
        titless.setWrapText(true);
        Font titleFont = wb.createFont();
        //标题字体
        titleFont.setFontName("Arial");
        //标题 字体大小
        titleFont.setFontHeightInPoints((short) 10);
        titless.setFont(titleFont);
        if (ArrayUtils.isNotEmpty(titles)) {
            //设置 标题的高度
            Row titleRow = sheet.createRow(rownum == 0 ? rownum++ : 0);
            titleRow.setHeightInPoints(60);

            for (int i = 0; i < titles.length; i++) {
                Cell titleCell = titleRow.createCell(i);
                titleCell.setCellStyle(titless);
                titleCell.setCellValue(titles[i]);
            }
        } else if (StringUtils.isNotEmpty(title)) {
            Row titleRow = sheet.createRow(rownum == 0 ? rownum++ : 0);
            titleRow.setHeightInPoints(60);

            Cell titleCell = titleRow.createCell(0);
            titleCell.setCellStyle(titless);
            titleCell.setCellValue(title);
        }
    }

之后 去改你的实体类,注意!!!!我这个存在一个缺陷必须每个表头对应每个列,不需要提示表头的要用" ",空字符跳过去 觉得太长可以加\n 换行,
上模板:

    @PostMapping("/importTemplate")
    public void importTemplate(HttpServletResponse response) {
        List<FpglOrdermain> list = new ArrayList<FpglOrdermain>();
        ExcelUtil<FpglOrdermain> util = new ExcelUtil<FpglOrdermain>(FpglOrdermain.class);
        String[] titles = {
                "标红“*”字段必填,且字段名称严禁更改\n" +
                        "\n" +
                        "长度不得超过64位",
                "(1个汉字=2个字符)",
                "税号",
                "","","",
                "类型",
                "",
                "种类",
                "",
                "地址不超出100字符",
                "",
                "不超出100字符",
                "","",
                "姓名不超过20个字符",
                "姓名不超过20个字符",
                "姓名不超过20个字符",
                "","",
                "",
                "对应明细行的行数\n" + "如:第一条明细 从 1 开始",
                "名称不超出90字符",
                "未填,否则则自动匹配",
                "规格型号不超出40字符",
                "单位不超出22字符",
                "数量、单价、金额:任选其中两项,或者仅填金额如果三项均填写:默认读取数量和单价 单价:不得超过10位小数 数量:不得超过10位小数 金额:不得超过2位小数",
                "","","","","",
                "同一订单下含税标志必须一致",
                "(仅限一行明细时填写有效,多行明细不可填写)",
                "1:是 0:否",
                "必填",
                ""
        };
        util.exportExcel(response, list, "订单列表数据",titles);
    }

这个是模板,导出的自己按着格式改一下啦0.0
注意!!!!因为多加了一行表头要加个去除从1开始读取

    @PreAuthorize("@ss.hasPermi('fpgl:ordermain:import')")
    @Log(title = "列表", businessType = BusinessType.IMPORT)
    @PostMapping("/importData")
    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception {
//    	System.out.println(111);
        ExcelUtil<FpglOrdermain> util = new ExcelUtil<FpglOrdermain>(FpglOrdermain.class);
        //注意这个 1
        List<FpglOrdermain> orderList = util.importExcel(file.getInputStream(),1);
        String operName = getUsername();
        String message = fpglOrdermainService.importOrder(orderList, updateSupport, operName);
        return AjaxResult.success(message);
    }

上面的标题放在controller 很不美观
所以定义一个 静态类

    /**
     * 下载订单列表模板
     */
    @PostMapping("/importTemplate")
    public void importTemplate(HttpServletResponse response) {
        List<FpglOrdermain> list = new ArrayList<FpglOrdermain>();
        ExcelUtil<FpglOrdermain> util = new ExcelUtil<FpglOrdermain>(FpglOrdermain.class);
        String[] titles = ExcelTemplate.ExcelOrdermain();

        util.exportExcel(response, list, "订单列表数据",titles);
    }

定义一个Excel标题类:ExcelTemplate.java

public static String [] ExcelOrdermain(){

        String[] titles = {
                 "标红“*”字段必填,且字段名称严禁更改\n" +
                        "\n" +
                        "长度不得超过64位",
                "(1个汉字=2个字符)",
                "税号",
                "","","",
                "类型",
                "",
                "种类",
                "",
                "地址不超出100字符",
                "",
                "不超出100字符",
                "","",
                "姓名不超过20个字符",
                "姓名不超过20个字符",
                "姓名不超过20个字符",
                "","",
                "",
                "对应明细行的行数\n" + "如:第一条明细 从 1 开始",
                "名称不超出90字符",
                "未填,否则则自动匹配",
                "规格型号不超出40字符",
                "单位不超出22字符",
                "数量、单价、金额:任选其中两项,或者仅填金额如果三项均填写:默认读取数量和单价 单价:不得超过10位小数 数量:不得超过10位小数 金额:不得超过2位小数",
                "","","","","",
                "同一订单下含税标志必须一致",
                "(仅限一行明细时填写有效,多行明细不可填写)",
                "1:是 0:否",
                "必填",
                ""
        };
        return titles;
    }

完工.0.0. 可以的话有大佬再帮忙修改下哈0.0 觉得可以点个赞哇,达瓦里氏.0.0.

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值