要克隆Apache POI工作表的部分并复制注释(注释存在但没有绘图),可以按照以下步骤进行操作:
Workbook workbook = WorkbookFactory.create(new FileInputStream("input.xlsx"));
int sourceSheetIndex = 0; // 要克隆的源工作表索引
int targetSheetIndex = 1; // 目标工作表的索引
Sheet sourceSheet = workbook.getSheetAt(sourceSheetIndex);
Sheet targetSheet = workbook.cloneSheet(targetSheetIndex);
Drawing> drawing = sourceSheet.createDrawingPatriarch();
List comments = drawing.getComments();
Drawing> targetDrawing = targetSheet.createDrawingPatriarch();
for (Comment comment : comments) {
ClientAnchor anchor = comment.getClientAnchor();
Comment newComment = targetDrawing.createCellComment(anchor);
newComment.setString(comment.getString());
targetDrawing.createCellComment(newComment);
}
workbook.write(new FileOutputStream("output.xlsx"));
workbook.close();
完整的代码示例如下:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
public class CloneWorksheetWithCommentsExample {
public static void main(String[] args) throws IOException {
Workbook workbook = WorkbookFactory.create(new FileInputStream("input.xlsx"));
int sourceSheetIndex = 0; // 要克隆的源工作表索引
int targetSheetIndex = 1; // 目标工作表的索引
Sheet sourceSheet = workbook.getSheetAt(sourceSheetIndex);
Sheet targetSheet = workbook.cloneSheet(targetSheetIndex);
Drawing> drawing = sourceSheet.createDrawingPatriarch();
List comments = drawing.getComments();
Drawing> targetDrawing = targetSheet.createDrawingPatriarch();
for (Comment comment : comments) {
ClientAnchor anchor = comment.getClientAnchor();
Comment newComment = targetDrawing.createCellComment(anchor);
newComment.setString(comment.getString());
targetDrawing.createCellComment(newComment);
}
workbook.write(new FileOutputStream("output.xlsx"));
workbook.close();
}
}
请注意,此示例假设输入文件为XLSX格式,并且源工作表和目标工作表的索引已根据实际情况进行设置。