要支持复制行图片,你需要对copyRow方法进行修改。以下是修改后的代码示例:
private void copyRow(Row source, Row target, Workbook workbook) {
// 遍历源行的每个单元格
for (int i = source.getFirstCellNum(); i <= source.getLastCellNum(); i++) {
Cell sourceCell = source.getCell(i);
// 如果源单元格为null,则不创建新单元格
if (sourceCell != null) {
Cell targetCell = target.createCell(i, sourceCell.getCellType());
// 复制单元格样式(如果需要)
CellStyle sourceCellStyle = sourceCell.getCellStyle();
CellStyle targetCellStyle = workbook.createCellStyle();
targetCellStyle.cloneStyleFrom(sourceCellStyle);
targetCell.setCellStyle(targetCellStyle);
// 根据单元格类型复制值
switch (sourceCell.getCellTypeEnum()) {
case STRING:
targetCell.setCellValue(sourceCell.getStringCellValue());
break;
case NUMERIC:
targetCell.setCellValue(sourceCell.getNumericCellValue());
break;
case BOOLEAN:
targetCell.setCellValue(sourceCell.getBooleanCellValue());
break;
case FORMULA:
// 如果单元格是公式,则复制公式本身
targetCell.setCellFormula(sourceCell.getCellFormula());
break;
case BLANK:
// 处理空白单元格
break;
case _NONE:
break;
case ERROR:
targetCel.setCellValue("");
break;
case _BLOB:
byte[] data = IOUtils.toByteArray(file.getInputStream());// 获取图片字节数组
int pictureIdx = workbook.addPicture(data, Workbook.PICTURE_TYPE_PNG); // 添加图片到Workbook中,并返回其索引
CreationHelper helper = workbook.getCreationHelper();
Drawing drawing = targetSheet.createDrawingPatriarch(); // 创建绘图工具
ClientAnchor anchor = helper.createClientAnchor();
// 设置图片位置和大小
anchor.setCol1(targetCell.getColumnIndex());
anchor.setRow1(targetCell.getRowIndex());
Picture pict = drawing.createPicture(anchor, pictureIdx);
break;
default:
// 默认处理
}
}
}
}
上述代码中,我添加了一段处理空白单元格的逻辑,以及复制行图片的逻辑。具体实现方式是读取源行的图片数据,将其添加到目标工作簿中,并在目标单元格中创建对应的图片对象。
请注意,这只是一个基本示例,实际使用时可能需要根据你的需求进行进一步调整和优化。
内容由零声教学AI助手提供,问题来源于学员提问




