要支持复制图片类型,您可以按照以下步骤进行优化:
- 首先,在
copyRow
方法中,添加处理图像的逻辑。检查源单元格是否为图像类型(CellType#PICTURE)。
case PICTURE:
if (sourceCell instanceof XSSFPicture) {
XSSFPicture sourcePicture = (XSSFPicture) sourceCell;
int pictureIndex = sourceWorkbook.addPicture(sourcePicture.getPictureData().getData(), sourcePicture.getPictureType());
XSSFDrawing drawing = targetSheet.createDrawingPatriarch();
XSSFClientAnchor anchor = new XSSFClientAnchor();
anchor.setCol1(sourceCell.getColumnIndex());
anchor.setCol2(sourceCell.getColumnIndex() + 1);
anchor.setRow1(targetRow.getRowNum());
anchor.setRow2(targetRow.getRowNum() + 1);
drawing.createPicture(anchor, pictureIndex);
}
break;
这段代码将复制源单元格中的图片数据,并在目标单元格上创建相应的图片对象。
- 在
mergeFileSheet
方法中,传递Workbook
实例以便复制图片时使用。
private void mergeFileSheet(File originalFile, List<String> fileUrls) throws Exception {
try (FileInputStream fis = new FileInputStream(originalFile);
Workbook originalWorkbook = new XSSFWorkbook(fis)) {
for (String fileUrl : fileUrls) {
// 下载附件
byte[] fileContent = fastDfsClient.download(fileUrl);
String originalFilename = fastDfsClient.getOriginalFilename(fileUrl);
try (ByteArrayInputStream bais = new ByteArrayInputStream(fileContent);
Workbook attachmentWorkbook = new XSSFWorkbook(bais)) {
// 获取附件中sheet数量
int numberOfSheets = attachmentWorkbook.getNumberOfSheets();
int sheetIndex = 0;
for (int i = 0; i < numberOfSheets; i++) {
// 附件sheet
Sheet attachmentSheet = attachmentWorkbook.getSheetAt(i);
// 判断sheet是否为空
boolean sheetEmpty = ExcelUtil.isSheetEmpty(attachmentSheet);
if(sheetEmpty){
continue;
}
sheetIndex++;
String newSheetName = "附件-" + originalFilename.substring(0, originalFilename.lastIndexOf(".")) + "-" + sheetIndex;
// 创建新的sheet页来放置附件内容
Sheet newSheet = originalWorkbook.createSheet(newSheetName);
// 在复制行之前传递源和目标工作簿对象
copyRows(attachmentSheet, newSheet, originalWorkbook);
}
}
}
// 写入修改后的Workbook到文件
try (FileOutputStream fos = new FileOutputStream(originalFile)) {
originalWorkbook.write(fos);
}
}
}
private void copyRows(Sheet sourceSheet, Sheet targetSheet, Workbook workbook) {
for (Row sourceRow : sourceSheet) {
Row targetRow = targetSheet.createRow(sourceRow.getRowNum());
copyRow(sourceRow, targetRow, workbook);
}
}
通过这些优化,您将能够复制源单元格中的图片,并在目标工作簿的相应单元格上创建相同的图片。
内容由零声教学AI助手提供,问题来源于学员提问