Java 如何使用POI Apache将表格从Excel文件单元格弹出式文档复制到另一个?
我试图从两个不同的XSSF工作簿中复制一张工作表。我已经编写了一个工作非常好的代码(见下文),但它没有考虑单元格的弹出文档,也没有复制它(这是合乎逻辑的,因为我没有编写函数性)。 我已经搜索了ApachePOI文档,看起来没有办法做到这一点。你知道我该怎么复制粘贴这些信息吗Java 如何使用POI Apache将表格从Excel文件单元格弹出式文档复制到另一个?,java,apache-poi,Java,Apache Poi,我试图从两个不同的XSSF工作簿中复制一张工作表。我已经编写了一个工作非常好的代码(见下文),但它没有考虑单元格的弹出文档,也没有复制它(这是合乎逻辑的,因为我没有编写函数性)。 我已经搜索了ApachePOI文档,看起来没有办法做到这一点。你知道我该怎么复制粘贴这些信息吗 public class CopySheets { public static void copySheet(String sheetName, XSSFWorkbook wbSrc,XSSFWorkbook w
public class CopySheets {
public static void copySheet(String sheetName, XSSFWorkbook wbSrc,XSSFWorkbook wbDest) throws IOException {
XSSFSheet srcSheet = null;
XSSFRow srcRow = null;
XSSFCell srcCell = null;
XSSFSheet destSheet = null;
XSSFRow destRow = null;
XSSFCell destCell = null;
int fCell = 0;
int lCell = 0;
int fRow = 0;
int lRow = 0;
System.out.println(sheetName);
srcSheet = wbSrc.getSheet(sheetName);
System.out.println(srcSheet);
if (srcSheet != null) {
destSheet = wbDest.createSheet(sheetName);
fRow = srcSheet.getFirstRowNum();
lRow = srcSheet.getLastRowNum();
for (int iRow = fRow; iRow <= lRow; iRow++) {
srcRow = srcSheet.getRow(iRow);
destRow = destSheet.createRow(iRow);
if (srcRow != null) {
fCell = srcRow.getFirstCellNum();
lCell = srcRow.getLastCellNum();
for (int iCell = fCell; iCell < lCell; iCell++) {
srcCell = srcRow.getCell(iCell);
destCell = destRow.createCell(iCell);
if (srcCell != null) {
switch (srcCell.getCellTypeEnum()) {
case BLANK:
destCell.setCellValue("");
break;
case BOOLEAN:
destCell.setCellValue(srcCell.getBooleanCellValue());
break;
case ERROR:
destCell.setCellErrorValue(srcCell.getErrorCellValue());
break;
case FORMULA:
destCell.setCellFormula(srcCell.getCellFormula());
break;
case NUMERIC:
destCell.setCellValue(srcCell.getNumericCellValue());
break;
case STRING:
destCell.setCellValue(srcCell.getStringCellValue());
break;
default:
destCell.setCellFormula(srcCell.getCellFormula());
}
CellStyle origStyle = srcCell.getCellStyle(); // Or from a cell
CellStyle newStyle = wbDest.createCellStyle();
newStyle.cloneStyleFrom(origStyle);
destCell.setCellStyle(newStyle);
Comment origComment=srcCell.getCellComment();
destCell.setCellComment(origComment);
}
}
}
}
}
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream("workbook.xls", true));
wbDest.write(bos);
bos.close();
}
}
公共类副本{
公共静态无效复制表(字符串sheetName、XSSFWorkbook wbSrc、XSSFWorkbook wbDest)引发IOException{
XSSFSheet srcSheet=null;
XSSFRow srcRow=null;
XSSFCell srcCell=null;
XSSFSheet destSheet=null;
XSSFRow destRow=null;
XSSFCell destCell=null;
int fCell=0;
int-lCell=0;
int fRow=0;
int lRow=0;
System.out.println(图纸名称);
srcSheet=wbSrc.getSheet(sheetName);
系统输出打印号(srcSheet);
if(srcSheet!=null){
destSheet=wbDest.createSheet(sheetName);
fRow=srcSheet.getFirstRowNum();
lRow=srcSheet.getLastRowNum();
对于(int-iRow=fRow;iRow好的,我找到了答案,原来POI有一些东西可以让我们在整个工作表上获得这些信息,所以我在代码中添加了这一点,它就像一个符咒
List<XSSFDataValidation> validations=srcSheet.getDataValidations();
for (XSSFDataValidation validation:validations){
destSheet.addValidationData(validation);
}
List validations=srcSheet.getDataValidations();
for(XSSFDataValidation验证:验证){
destSheet.addValidationData(验证);
}
查看文档-
似乎src Comment对象的getAddress()
方法将返回对它以前附加到的单元格(即src单元格)的引用
您应该尝试创建新的注释
,而不是
Comment origComment=srcCell.getCellComment();
destCell.setCellComment(origComment);
你应该用复印机
XSSFWorkbook workbookFrom = new XSSFWorkbook(new File("/path/to/workbookFrom.xlsx"));
XSSFSheet sheetFrom = workbookFrom.getSheetAt(0);
XSSFWorkbook workbookTo = new XSSFWorkbook(new File("/path/to/workbookTo.xlsx"));
XSSFSheet sheetTo = workbookTo.createSheet("sheet1");
workbookTo.setSheetOrder("sheet1", 0);
XSSFRangeCopier xssfRangeCopier = new XSSFRangeCopier(sheetFrom, sheetTo);
//copy the row height and column width, and find the max column num
int lastRow = sheetFrom.getLastRowNum();
int lastCol = 0;
for (int i = 0; i < lastRow; i++) {
Row row = sheetFrom.getRow(i);
if (row != null) {
if (row.getLastCellNum() > lastCol) {
lastCol = row.getLastCellNum();
}
sheetTo.setDefaultRowHeight(sheetFrom.getDefaultRowHeight());
}
}
for (int j = 0; j < lastCol; j++) {
sheetTo.setColumnWidth(j, sheetFrom.getColumnWidth(j));
}
//copy contents from source sheet to destination sheet
CellRangeAddress cellAddresses = new CellRangeAddress(0, lastRow, 0, lastCol);
xssfRangeCopier.copyRange(cellAddresses, cellAddresses, true, true);
workbookTo.write(new FileOutputStream(new File("/path/to/worksheetTo.xlsx")));
XSSFWorkbook workbookFrom=newxssfworkbook(新文件(“/path/to/workbookFrom.xlsx”);
XSSFSheet sheetFrom=工作簿from.getSheetAt(0);
XSSF工作簿工作簿到=新XSSF工作簿(新文件(“/path/to/workbookTo.xlsx”);
XSSFSheet sheetTo=workbookTo.createSheet(“sheet1”);
工作簿到.设置表(“表1”,0);
XSSFRangeCopier XSSFRangeCopier=新XSSFRangeCopier(sheetFrom,sheetTo);
//复制行高和列宽,并找到最大列数
int lastRow=sheetFrom.getLastRowNum();
int-lastCol=0;
对于(int i=0;ilastCol){
lastCol=row.getLastCellNum();
}
sheetTo.setDefaultRowHeight(sheetFrom.getDefaultRowHeight());
}
}
对于(int j=0;j