poi导出Excel

需求是根据传输的数据生成个Excel,在把Excel传到别的接口,所以对格式没有太高要求,有格式要求的可以在单独搜一下相关格式。
本例中导出的为.xls,有大数据量导出需求的可以导出.xlsx,把文中HSSFWorkbook换为SXSSFWorkbook即可

一、引入maven

 <dependency>
    <groupId>org.apache.poi</groupId>
     <artifactId>poi-ooxml</artifactId>
     <version>5.0.0</version>
 </dependency>

二、简单粗暴上代码

这里是引用util的部分,下面是util的详细内容。Map中的key是最终导出Excel的行标题,value是这一列对应的json中的字段名。

在这里插入图片描述

//入参headers:文档的第一行的标题
//入参jsonArray:文档内容部分
  public static HSSFWorkbook ExportExcel(Map<String, String> headers, JSONArray jsonArray){
        // 声明一个工作薄
        HSSFWorkbook workbook = new HSSFWorkbook();
        // 生成一个工作表
        HSSFSheet sheet = workbook.createSheet();
        // 设置表格默认列宽度为20个字节
        sheet.setDefaultColumnWidth((short) 20);

        //单元格样式
        HSSFCellStyle cellStyle = workbook.createCellStyle();
        cellStyle.setAlignment(HorizontalAlignment.CENTER);//居中
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中
        HSSFDataFormat format = workbook.createDataFormat();
        cellStyle.setDataFormat(format.getFormat("@"));//文本格式
        // 文字样式
        HSSFFont cellFont = workbook.createFont();
        cellFont.setFontHeightInPoints((short) 11);//字号
        cellFont.setFontName("等线");//字体
        cellStyle.setFont(cellFont);

        //筹备一下表头和传来的字段名
        int w = 0;
        String[] deatilsName = new String[headers.size()];
        String[] header = new String[headers.size()];
        Iterator<String> iter = headers.keySet().iterator();
        while (iter.hasNext()) {
            String fieldName = iter.next();
            deatilsName[w] =headers.get(fieldName);
            header[w] = fieldName;
            w++;
        }


        // 遍历集合数据,产生数据行
        int rowIndex = 0;
        for (Object obj : jsonArray) {
            if(rowIndex == 65535 || rowIndex == 0){
            	//如果数据超过了,则在第二页显示
                if ( rowIndex != 0 ) sheet = workbook.createSheet();
                HSSFRow headerRow = sheet.createRow(0); //列头
                for(int t=0;t<header.length;t++) {
                    headerRow.createCell(t).setCellValue(header[t]);
                    headerRow.getCell(t).setCellStyle(cellStyle);
                }
                rowIndex = 1;
            }
            JSONObject jo = (JSONObject) JSONObject.toJSON(obj);
            HSSFRow dataRow = sheet.createRow(rowIndex);
            for (int b = 0; b < deatilsName.length; b++) {
                HSSFCell newCell = dataRow.createCell(b);

                Object o =  jo.get(deatilsName[b]);
                String cellValue = "";
                if(o==null) cellValue = "";
                else if(o instanceof Date) cellValue = new SimpleDateFormat("yyyy-mm-dd").format(o);
                else cellValue = o.toString();

                newCell.setCellValue(cellValue);
                newCell.setCellStyle(cellStyle);
            }
            rowIndex++;
        }
        return workbook;
    }

效果基本就是这样的在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一颗十月橘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值