Apache POI插件Feb 14,2020 最新版使用随手记

一、引入插件

        <!-- Apache POI插件 (Feb 14, 2020)-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>

二、创建一个工作簿

1.绘制Excel(Map<String, List> tableMap) 参数JSON结构
//Map<String, List<EzStdLayersLayerAndFields>> tableMap
{
  "表A": [
    {
      "TYPE": "VARCHAR",
      "FIELDNAME": "TYPE",
      "ALIASNAME": "类型"
    },
    {
      "TYPE": "VARCHAR",
      "FIELDNAME": "NAME",
      "ALIASNAME": "名称"
    },
    {
      "TYPE": "VARCHAR",
      "FIELDNAME": "ALIAS",
      "ALIASNAME": "别名"
    }
  ]
}
2.实现代码
public static void 绘制Excel(Map<String, List<LayerAndFields>> tableMap) {
        //新建工作簿
        XSSFWorkbook workbook = new XSSFWorkbook();
        //新建工作表
        for (Map.Entry<String, List<LayerAndFields>> table : tableMap.entrySet()) {
            //设置工作表名
            String sheetName = table.getKey();
            //工作表名称必须去除windows非法字符,用'&' 替代
            Pattern pattern = Pattern.compile("[\\s\\\\/:\\*\\?\\\"<>\\|]");
            Matcher matcher = pattern.matcher(sheetName);

            XSSFSheet sheet = workbook.createSheet(matcher.replaceAll("&"));
            //创建行
            //设置第一行表头
            row = sheet.createRow(0);//创建第一行表头

            //设置表头 样式背景颜色 - 灰色 ,列宽基数:0.72
            XSSFCellStyle style = workbook.createCellStyle();
            style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
            /* 旧版style.setFillPattern(CellStyle.SOLID_FOREGROUND);
               新版style.setFillPattern(FillPatternType.SOLID_FOREGROUND);*/
            style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
            cell = row.createCell(0, CellType.STRING);
            cell.setCellValue("序号");
            sheet.setColumnWidth(0, (int) ((5 + 0.72) * 256));//5字符
            cell.setCellStyle(style);

            style = workbook.createCellStyle();
            style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
            style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
            cell = row.createCell(1, CellType.STRING);
            cell.setCellValue("字段名称");
            sheet.setColumnWidth(1, (int) ((25 + 0.72) * 256));//25字符
            cell.setCellStyle(style);

            style = workbook.createCellStyle();
            style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
            style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
            cell = row.createCell(2, CellType.STRING);
            cell.setCellValue("字段别名");
            sheet.setColumnWidth(2, (int) ((25 + 0.72) * 256));//25字符
            cell.setCellStyle(style);

            //除第一行以外,开始绘制第二行到最后
            int rowNum = 0;
            for (LayerAndFields fieldsInRow : table.getValue()) {

                row = sheet.createRow(++rowNum);
                cell = row.createCell(0, CellType.NUMERIC);
                cell.setCellValue(rowNum);

                cell = row.createCell(1, CellType.STRING);
                cell.setCellValue(fieldsInRow.getFieldName());

                cell = row.createCell(2, CellType.STRING);
                cell.setCellValue(fieldsInRow.getAliasName());

            }
        }

        try {

            FileOutputStream outputStream = new FileOutputStream(new File("src/main/resources/数据清单.xlsx"));
            workbook.write(outputStream);

            workbook.close();//关闭工作簿
            outputStream.close();//关闭流
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
原MySQL数据

在这里插入图片描述

最终Excel结果

在这里插入图片描述

三、总结

  1. 注意新旧版本设置格式的区别
			/*旧版CellStyle  新版XSSFCellStyle 或 HSSFCellStyle*/
           XSSFCellStyle style = workbook.createCellStyle();
            style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
            /* 旧版style.setFillPattern(CellStyle.SOLID_FOREGROUND);
               新版style.setFillPattern(FillPatternType.SOLID_FOREGROUND);*/
            style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
            cell = row.createCell(0, CellType.STRING);
            cell.setCellValue("序号");
            sheet.setColumnWidth(0, (int) ((5 + 0.72) * 256));//5字符
            cell.setCellStyle(style);
  1. 除了Springboot引入poi以外,还要引入poi-ooxml
  2. 工作表名称不能包含 / \ : * " < > | ,必须去除windows非法字符,否则报异常
java.lang.IllegalArgumentException: Invalid char (/) found at index (2) in sheet name '非法/字符*名称示例"'

如有补充或问题欢迎评论区留言。。。

JJ❥YY

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值