gpt4 book ai didi

java - XSSF 无法复制样式 (POI)

转载 作者:搜寻专家 更新时间:2023-10-31 19:33:48 29 4
gpt4 key购买 nike

无法将“STYLE”从 .xlsx 文件复制到另一个文件。

这是我正在使用的代码。

 public static void copyCell(XSSFCell oldCell, XSSFCell newCell, Map<Integer, XSSFCellStyle> styleMap) {     
if(styleMap != null) {
if(oldCell.getSheet().getWorkbook() .equals( newCell.getSheet().getWorkbook())){
newCell.setCellStyle(oldCell.getCellStyle());

} else{
int stHashCode = oldCell.getCellStyle().hashCode();
XSSFCellStyle newCellStyle = styleMap.get(stHashCode);

if(newCellStyle == null){
newCellStyle = newCell.getSheet().getWorkbook().createCellStyle();
newCellStyle.cloneStyleFrom(oldCell.getCellStyle());
styleMap.put(stHashCode, newCellStyle);
}
newCell.setCellStyle(newCellStyle);
}
}
switch(oldCell.getCellType()) {
case XSSFCell.CELL_TYPE_STRING:
newCell.setCellValue(oldCell.getStringCellValue());
break;
case XSSFCell.CELL_TYPE_NUMERIC:
newCell.setCellValue(oldCell.getNumericCellValue());
break;
case XSSFCell.CELL_TYPE_BLANK:
newCell.setCellType(XSSFCell.CELL_TYPE_BLANK);
break;
case XSSFCell.CELL_TYPE_BOOLEAN:
newCell.setCellValue(oldCell.getBooleanCellValue());
break;
case XSSFCell.CELL_TYPE_ERROR:
newCell.setCellErrorValue(oldCell.getErrorCellValue());
break;
case XSSFCell.CELL_TYPE_FORMULA:
newCell.setCellFormula(oldCell.getCellFormula());
break;
default:
break;
}

}

同样适用于 HSSF,即 .xls 文件,但不适用于 XSSF (.xlsx)

请给出一些建议或示例代码来解决这个问题。

最佳答案

我相信这个问题是由这个声明产生的:

    XSSFCellStyle newCellStyle = styleMap.get(stHashCode);

使用此语句,您基本上是在说 newCellStyle = oldCellStyle。但是,在这种情况下,oldCellStyle 链接到另一个工作簿,打开文件时会出现错误,因为链接已损坏。

只需使用您的代码,删除那个语句和测试,它应该可以正常工作:

    newCellStyle = newCell.getSheet().getWorkbook().createCellStyle();     
newCellStyle.cloneStyleFrom(oldCell.getCellStyle());
styleMap.put(stHashCode, newCellStyle);

关于java - XSSF 无法复制样式 (POI),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18124581/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com