SpringBoot生成excel(带本地图片),生成自定义二维码并导入到excel

先看效果:
在这里插入图片描述

再看代码:

 @RequestMapping("/create")
    public String createExcel(QrCodeData qrCodeData) throws Exception {
    
    
		// 创建一个webbook,对应一个Excel文件
        HSSFWorkbook wb = new HSSFWorkbook();
        //在生成的Excel文件基础上,在生成一个以qrCodeData.getWordNo()命名的工作表
        HSSFSheet sheetAll = wb.createSheet(qrCodeData.getWordNo());
		// 工作表的第一行
        HSSFRow hssfRow = sheetAll.createRow(0);
        //第一行的第一个单元格
        HSSFCell cellAll = hssfRow.createCell( (short) 1);
        //第一行的第一个单元格的值
        cellAll.setCellValue("单号:");
        //第一行的第二个单元格
        cellAll = hssfRow.createCell((short) 2);
         //第一行的第二个单元格的值
        cellAll.setCellValue(qrCodeData.getOrderNo());
		// 依次类推
        hssfRow = sheetAll.createRow(1);
        cellAll = hssfRow.createCell((short) 1);
        cellAll.setCellValue("类别:");
        cellAll = hssfRow.createCell((short) 2);
        cellAll.setCellValue(qrCodeData.getTypeStr());

        hssfRow = sheetAll.createRow(2);
        cellAll = hssfRow.createCell((short) 1);
        cellAll.setCellValue("型号:");
        cellAll = hssfRow.createCell((short) 2);
        cellAll.setCellValue(qrCodeData.getSizeNo());

        hssfRow = sheetAll.createRow(3);
        cellAll = hssfRow.createCell((short) 1);
        cellAll.setCellValue("批次:");
        cellAll = hssfRow.createCell((short) 2);
        cellAll.setCellValue(qrCodeData.getNumNo());

        hssfRow = sheetAll.createRow(4);
        cellAll = hssfRow.createCell((short) 1);
        cellAll.setCellValue("工作号: ");
        cellAll = hssfRow.createCell((short) 2);
        cellAll.setCellValue(qrCodeData.getWordNo());

		// 在这个工作表上画图
        HSSFPatriarch drawingPatriarch = sheetAll.createDrawingPatriarch();
        // 二维码辅助类
        QRcodeUtil qRcodeUtil = new QRcodeUtil();
        // 生成二维码的保存地址(当前项目\\aQrCodeFile\\aQrCodeImg\\目录里)
        String qrCodeImage = qRcodeUtil.getQRCodeImage(qrCodeData.getSizeNo(), 200, 200, System.getProperty ("user.dir") + "\\aQrCodeFile\\aQrCodeImg\\", "订单号--"+qrCodeData.getOrderNo());
        // 用文件流写入,不详细说了
        BufferedImage bufferImg = null;
        ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
        bufferImg = ImageIO.read(new File(qrCodeImage));
        ImageIO.write(bufferImg, "jpg", byteArrayOut);
        //anchor主要用于设置图片的属性  可以搜下HSSFClientAnchor的参数
        HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 255, 255,(short) 5, 2, (short) 9, 12);
        //设置图片的移动和缩放
        anchor.setAnchorType(ClientAnchor.AnchorType.byId(3));
        //插入图片到excel
        drawingPatriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));

        // 将excel文件存到指定位置
        File file = new File(System.getProperty ("user.dir")+ "\\aQrCodeFile\\");
        if(!file.exists()){
    
    
            file.mkdirs();
        }
        //当前时间命名excel
        String nowDateStr = new SimpleDateFormat("YYYYMMddHHmmss").format(new Date());
        //保存文件到:当前项目\\aQrCodeFile\\里
        FileOutputStream fout = new FileOutputStream(System.getProperty ("user.dir")+ "\\aQrCodeFile\\" + nowDateStr +".xls");
        wb.write(fout);
        fout.close();
		//我是配置的tomcat,所以返回的文件名
        return nowDateStr +".xls";

    }

缺少的类和依赖,都粘贴到下边了,如果还缺少啥的话,私信或者留言都可以:

依赖

		 <!-- POI依赖 -->
		<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>
        <!-- 生成二维码依赖 -->
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>3.4.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>javase</artifactId>
            <version>3.4.0</version>
        </dependency>

QRcodeUtil 二维码辅助类

public class QRcodeUtil {
    
    

    /**
     * 生成发送二维码方法
     *
     * @param text     二维码生成规则(二维码可以是任何英文字母加数字生成的二维码)
     * @param width    宽度
     * @param height   高度
     * @param filePath 输出图片地址
     */
    public String getQRCodeImage(String text, int width, int height, String filePath, String fileNewName) throws WriterException, IOException {
    
    
        File file = new File(filePath);
        if (!file.exists()){
    
    
            file.mkdirs();
        }
        //生成二维码类
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        //生成的二维码
        BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
        //生成图片唯一名称,加上.png格式
        String pat = fileNewName + ".png";
        //图片路劲加上图片名称  (输出地址)
        filePath += pat;
        Path path = FileSystems.getDefault().getPath(filePath);
        //输出二维码图片
        MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);
        return filePath;
    }
}

QrCodeData 实体类,请自行Get Set方法


    /** 注释 */
    private String orderNo;

    /** 注释  */
    private String typeStr;

    /** 注释  */
    private String sizeNo;

    /** 注释  */
    private String numNo;

    /** 注释  */
    private String wordNo;

全部的就在这了,创建一个springboot项目,复制粘贴即可。
结构
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45729937/article/details/128247596
今日推荐