要将多张图片排列在一行中,不重叠,存储在一个单元格中,可以使用 XSSFClientAnchor 的参数来控制每张图片的位置和大小。以下是修改后的代码:

if (dataKeys[cellNum].equals('images')) {
    JSONArray images = temp.optJSONArray('images');
    if (images != null) {
        int pictureWidth = 100; // 设置图片宽度(单位:像素)
        int pictureHeight = 100; // 设置图片高度(单位:像素)
        int xOffset = 20; // 图片之间的横向偏移量
        int yOffset = 20; // 图片之间的纵向偏移量
        
        // 创建一个合并单元格,用于存储多张图片
        CellRangeAddress mergedRegion = new CellRangeAddress(i + rowcount, i + rowcount, cellNum, cellNum + images.length() - 1);
        sheet.addMergedRegion(mergedRegion);
        
        for (int j = 0; j < images.length(); j++) {
            String imageUrl = images.optString(j);
            URL imageUrlObj = new URL(imageUrl);
            InputStream imageStream = imageUrlObj.openStream();
            byte[] byteArray = IOUtils.toByteArray(imageStream);
            int pictureIndex = wb.addPicture(byteArray, Workbook.PICTURE_TYPE_JPEG);

            XSSFClientAnchor anchor = new XSSFClientAnchor(
                xOffset, yOffset, xOffset + pictureWidth, yOffset + pictureHeight,
                (short) cellNum + j, i + rowcount, (short) (cellNum + j), i + rowcount
            );

            XSSFPicture picture = patriarch.createPicture(anchor, pictureIndex);
            picture.resize(pictureWidth, pictureHeight); // 调整图片大小

            xOffset += pictureWidth + 20; // 更新下一张图片的横向偏移量
        }
    }
} else {
    CellUtil.createCell(r, cellNum, value);
}

以上代码将在指定的单元格中创建一个合并单元格,用于存储多张图片。然后,根据图片数量循环创建图片,并使用 XSSFClientAnchor 来设置每张图片的位置和大小。每张图片的横向偏移量(xOffset)会根据图片的宽度和间距进行更新,以便实现不重叠的效果。

Excel 单元格中排列多张图片,不重叠

原文地址: https://www.cveoy.top/t/topic/qEkw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录