java - 将样式从一个 Excel 工作簿复制到另一个 Excel 工作簿

标签 java excel apache-poi

我想将工作簿的一张工作表(包括样式)复制到新工作簿。

我尝试迭代所有单元格并且

CellStyle newCellStyle = workbook.createCellStyle();
newCellStyle.cloneStyleFrom(oldCell.getCellStyle());
newCell.setCellStyle(newCellStyle);

抛出 java.lang.IllegalStateException:超出了单元格样式的最大数量。您最多可以在 .xls 工作簿中定义 4000 种样式

CellStyle newCellStyle = oldCell.getCellStyle();
newCell.setCellStyle(newCellStyle);

抛出 java.lang.IllegalArgumentException:此样式不属于提供的工作簿。您是否正在尝试将一个工作簿中的样式分配给另一工作簿的单元格?

复制样式的正确方法是什么?

最佳答案

用包含样式的 HashMap 解决了这个问题

HashMap<Integer, CellStyle> styleMap = new HashMap<Integer, CellStyle>();
public void copyCell(Cell oldCell, Cell newCell){
       int styleHashCode = oldCell.getCellStyle().hashCode();
           CellStyle newCellStyle = styleMap.get(styleHashCode);
           if(newCellStyle == null){
               newCellStyle = newCell.getSheet().getWorkbook().createCellStyle();
               newCellStyle.cloneStyleFrom(oldCell.getCellStyle());
               styleMap.put(styleHashCode, newCellStyle);
           }
           newCell.setCellStyle(newCellStyle);
}

关于java - 将样式从一个 Excel 工作簿复制到另一个 Excel 工作簿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45273676/

相关文章:

java - 使用ini4j编辑Windows注册表

java - 从浏览器地址栏复制 URL 并使用 html 粘贴到表单中?

java - HikariCP - 负载测试使性能下降到停止

excel - VB新手。我的代码生成错误 : "expecting End With". with-end with 语句如何工作?

excel - Excel 中具有本地化功能的 SSRS 日期格式

excel - CSV:如何包含双字节字符

java - 检查行是否包含单词

java - 检查 Excel 工作表是否 protected 并查找密码(使用 apache poi)

java - 莫基托。如何基于模拟对象作为参数返回 boolean 值?

android - 如何在 Android 中将 PDF 转换为 HTML 页面?