Java Poi 导出excel(含图片及多个sheet)

因为之前做的导出都是导出数据的基本信息不含图片的那种,一直也没做过导出图片的excel,正好这两天做这个需求就做了一个,好 废话不多说,直接上图 ,因为我这边是根据模板导出数据 先看下模板

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d1cWl3ZWk1MjE=,size_16,color_FFFFFF,t_70

然后上代码 都写的注释 

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d1cWl3ZWk1MjE=,size_16,color_FFFFFF,t_70

因为我这个是生成三个sheet 所以调用了三次这个excel导出方法,

/**
     * @param list     (表格的数据)
     * @param out        (输出流)
     * @throws Exception
     * @Description: 导出Excel
     */
    public  XSSFWorkbook exportImgData(XSSFWorkbook workbook,
                                              List<Map<Integer, Object>> list,
                                             OutputStream out,String type) throws Exception {
 
/*
        XSSFWorkbook workbook = new XSSFWorkbook();
*/
        int index = 0;
        //判断当前类型 多个sheet
        if(type.equalsIgnoreCase(UserTypeEnum.LEARNNER_INFO_TYPE.getCode())){
            index = 0;
        }else if(type.equalsIgnoreCase(UserTypeEnum.LEARNNER_STUDY_INFO_TYPE.getCode())){
            index = 1;
        }else if(type.equalsIgnoreCase(UserTypeEnum.LEARNNER_EXAM_INFO_TYPE.getCode())){
            index = 2;
        }
 
        XSSFSheet sheet = workbook.getSheetAt(index);   //读取第一个工作簿
/*
        Sheet sheet = workbook.createSheet(sheetTitle);
*/
       
     /*   workbook.setSheetName(sheetNum, sheetTitle);*/
        Set<ByteArrayOutputStream> set = new HashSet<ByteArrayOutputStream>();
        XSSFDrawing patriarch = (XSSFDrawing) sheet.createDrawingPatriarch();
        // 设置表格默认列宽度为20个字节
        sheet.setDefaultColumnWidth((short) 20);
        // 生成一个样式
        XSSFCellStyle style = workbook.createCellStyle();
        // 设置这些样式
        style.setFillForegroundColor(HSSFColor.PALE_BLUE.index);
        style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
        style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
        style.setBorderRight(HSSFCellStyle.BORDER_THIN);
        style.setBorderTop(HSSFCellStyle.BORDER_THIN);
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        style.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);//垂直
 
        // 生成一个字体
        XSSFFont font = workbook.createFont();
        font.setColor(HSSFColor.BLACK.index);
        font.setFontHeightInPoints((short) 12);
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        // 把字体应用到当前的样式
        style.setFont(font);
        // 指定当单元格内容显示不下时自动换行
        style.setWrapText(true);
        //创建行
        int a = 3;
        for(int j= 0;j<list.size();j++){
            Map<Integer,Object> map = list.get(j);
            //创建行
            Row rowContent = sheet.createRow(a+j);
            //rowContent.setHeightInPoints((float) 30); 可以设置高度
            //循环创建列(3列)
            for(int i=0;i<=map.size()-1;i++){
                Cell cellContent = rowContent.createCell(i);
                if (map.get(i) instanceof String) {
                    cellContent.setCellValue((String) map.get(i));
                } else if (map.get(i) instanceof Integer) {
                    cellContent.setCellValue((int) map.get(i));
                } else if (map.get(i) instanceof Double) {
                    cellContent.setCellValue((double) map.get(i));
                } else if (map.get(i) instanceof ByteArrayOutputStream){
                    //anchor主要用于设置图片的属性
                    XSSFClientAnchor anchor3 = new XSSFClientAnchor(0, 0, 0, 0,(short) cellContent.getColumnIndex(), cellContent.getRowIndex(), (short) (cellContent.getColumnIndex()+1), cellContent.getRowIndex()+1);
                    ByteArrayOutputStream byteArrayOut3 = (ByteArrayOutputStream) map.get(i);
                    set.add(byteArrayOut3);
 
                    int ptype = workbook.PICTURE_TYPE_PNG;
                    //插入图片
                    patriarch.createPicture(anchor3, workbook.addPicture(byteArrayOut3.toByteArray(), ptype));
                }
                cellContent.setCellStyle(style);
 
            }
        }
        return  workbook;
    }

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d1cWl3ZWk1MjE=,size_16,color_FFFFFF,t_70

红框内是因为我这边业务的需求,所以才这么写,各位可以根据自己的业务需求,修改一下。(这块重点提一下,数据的问题,含有图片的时候,不能放路径,要转换成ByteArrayOutputStrea(字符数据输出流)。

好了,最后给大家看一下效果图

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d1cWl3ZWk1MjE=,size_16,color_FFFFFF,t_70

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d1cWl3ZWk1MjE=,size_16,color_FFFFFF,t_70

转载于:https://my.oschina.net/447045805/blog/2885366

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值