使用 Apache POI 将图片地址转换为图片写入 Excel 表格

第一段代码:

String[] displayKeys = {'编号', '上传日期', '图片',  '姓名'}; 
String[] dataKeys = {'id', 'date', 'images',  'username'};
xlsx.create(path, fileName, 'xlsx');
String flag = xlsx.writeInXlsxBulk(tempData.toString(), null, displayKeys, dataKeys);

第二段代码:

JSONObject json = new JSONObject(jsonstr);
JSONArray data = json.getJSONArray('data');
int length = data.length();

// 创建绘图对象
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();

for(int i=0; i<length; i++) {
    r = sheet.createRow(i+rowcount);
    r.setHeight((short)(256*1.5));
    
    int cellNum = 0;
    JSONObject temp = new JSONObject(data.optString(i));
    for(cellNum=0; cellNum<displayKeys.length; cellNum++) {
        String key = dataKeys[cellNum];
        String value = temp.optString(key);
        
        if(key.equals('images')) {
            // 将图片地址转换为图片
            URL imageUrl = new URL(value);
            InputStream imageStream = imageUrl.openStream();
            byte[] bytes = IOUtils.toByteArray(imageStream);
            int pictureIdx = workbook.addPicture(bytes, HSSFWorkbook.PICTURE_TYPE_JPEG);
            
            // 创建图片位置
            CreationHelper helper = workbook.getCreationHelper();
            ClientAnchor anchor = helper.createClientAnchor();
            anchor.setCol1(cellNum);
            anchor.setRow1(i+rowcount);
            anchor.setCol2(cellNum+1);
            anchor.setRow2(i+rowcount+1);
            
            // 插入图片
            patriarch.createPicture(anchor, pictureIdx);
        } else {
            // 创建普通单元格
            CellUtil.createCell(r, cellNum, value);
        }
    }
}

上述代码中,当遍历到 'images' 字段时,先将图片地址转换为字节数组,然后使用 workbook.addPicture 将图片添加到工作簿中,接着使用 patriarch.createPicture 将图片插入到表格中对应的单元格位置。其他字段仍然使用原来的代码创建普通单元格。

请确保您已经导入了所需的包,例如 import org.apache.poi.ss.util.CellUtil;import org.apache.poi.util.IOUtils; 等。

修改后的代码应该能够将图片地址转换为图片并写入到表格中。

注意:

  • 确保 tempData 中的 'images' 字段存储的是有效的图片 URL 地址。
  • HSSFWorkbook.PICTURE_TYPE_JPEG 仅支持 JPEG 图片,其他格式需要修改代码。
  • 您可以根据需要调整图片大小和位置。
  • 为了避免图片占用过多空间,建议将图片存储在独立的文件夹中,并将文件路径写入表格中,然后使用 java.awt.Image 加载图片并展示。

更多信息:

Java 使用 Apache POI 将图片地址转换为图片写入 Excel 表格

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

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