要支持复制行图片,你需要进行以下修改:
- 在
copyRow()方法中添加复制图片的逻辑。你可以使用Drawing对象和ClientAnchor来处理图片的复制。
private void copyRow(Row source, Row target, Workbook workbook) {
// 复制行内容(文本、数值等)
for (int i = source.getFirstCellNum(); i <= source.getLastCellNum(); i++) {
Cell sourceCell = source.getCell(i);
if (sourceCell != null) {
Cell targetCell = target.createCell(i, sourceCell.getCellType());
// 省略其他代码...
// 根据单元格类型复制值
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:
// target.setCellType(CellType.BLANK);
break;
default:
// 默认处理
}
}
}
// 复制行中的图片
Drawing<?> drawingSource = ((XSSFSheet)source.getSheet()).createDrawingPatriarch();
Drawing<?> drawingTarget = ((XSSFSheet)target.getSheet()).createDrawingPatriarch();
for (Object obj : drawingSource) {
if (obj instanceof Picture) {
Picture picture = (Picture)obj;
int rowIdx = picture.getClientAnchor().getRow1();
if (rowIdx == source.getRowNum()) {
ClientAnchor anchor = picture.getClientAnchor();
int col1 = anchor.getCol1();
int row1 = target.getRowNum();
int col2 = anchor.getCol2();
int row2 = row1 + (anchor.getRow2() - anchor.getRow1());
PictureData pictureData = picture.getPictureData();
byte[] data = pictureData.getData();
// 添加新的图片到目标行
int pictureIdx = workbook.addPicture(data, Workbook.PICTURE_TYPE_PNG);
CreationHelper creationHelper = workbook.getCreationHelper();
Drawing<?> newDrawingTarget = ((XSSFSheet)target.getSheet()).createDrawingPatriarch();
ClientAnchor newAnchor = creationHelper.createClientAnchor();
newAnchor.setCol1(col1);
newAnchor.setRow1(row1);
newAnchor.setCol2(col2);
newAnchor.setRow2(row2);
Picture newPicture = newDrawingTarget.createPicture(newAnchor, pictureIdx);
}
}
}
}
请注意,上述代码是针对基于XSSF(.xlsx)格式的Excel文档进行修改。如果你使用的是HSSF(.xls)格式,则需要相应地调整代码。
希望这可以帮助你实现复制行图片的功能!
内容由零声教学AI助手提供,问题来源于学员提问




