java poi excel 生成图片

图片说明

我想要通过 1 **的数据。。怎么样在excel 插入图片的时候 让图片能够等比例的缩放呢
也就是我想问的 **2
里面的数据怎么写呢?

设置图片的缩放比例 这样等比例应该没问题了

先看下这个 http://www.bubuko.com/infodetail-2310009.html

你要等比例缩放,无非就是固定x,算出对应比例的y,或者固定y,算出对应比例的x。
根据上面的链接,以及假设你的图片从(0,0)开始,可以看出,x的长度等于它跨过所有单元格的宽度+最后一个单元格里的长度,由dx制定
y则是跨越单元格的高度的总和和最后一个单元格中的高度,由dy指定。

        ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
        BufferedImage bufferedImg = ImageIO.read(new File("e:\\111.png"));
        int imgH = bufferedImg.getHeight();
        int imgW = bufferedImg.getWidth();
        ImageIO.write(bufferedImg, "png", byteArrayOut);
        HSSFWorkbook workbook = new HSSFWorkbook();// 创建个空白的workbook
        HSSFSheet sheet = workbook.createSheet();// 创建个空白的sheet
        // 单元格宽度
        int w = sheet.getColumnWidth(0) / 256;
        HSSFRow row = sheet.createRow(0);
        // 单元格高度
        float hp = row.getHeightInPoints();
        int h = (int) (row.getHeight() / hp);
        // sheet.createRow(rownum)
        System.out.println(h);
        HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
        System.out.println("图片:高:宽" + imgH + "==" + imgW);
        System.out.println("单元格:高:宽" + h + "==" + w);
        // 比如你想让图片占10行
        // HSSFClientAnchor 参数
        // dx1 dy1起始单元格x y 坐标
        int dx1 = 0;
        int dy1 = 0;
        // dx2 dy2 结束单元格 x y 坐标
        int dx2 = w;
        int dy2 = h;
        // 起始列 起始行
        short col1 = 0;
        int row1 = 0;
        // 结束列 结束行
        int row2 = 10;// 因为你想占10行 所以这里是10
        int colInt = row2 * w * imgH / imgW / h;
        short col2 = (short) colInt;
        HSSFClientAnchor anchor = new HSSFClientAnchor(dx1, dy1, dx2, dy2,
                col1, row1, col2, row2);
        patriarch.createPicture(anchor, workbook.addPicture(
                byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG));
        FileOutputStream fileOut = new FileOutputStream("e:\\111.xls");
        workbook.write(fileOut);

    基本计算公式就是图片高/图片宽 = (行数*行宽)/(列数*列宽) 这样结果肯定在转换的时候有一点点差距 但是差距不大