• Apache POI CellStyle cloneStyleFrom


    问题描述

    在使用 Apache POI-3.8的时候,需要一个功能,就是处理上传得 Excel的 cell style。如果数据有错误,则标红或者加上其他 style 标识。但是当直接获取到 cell 的 style 进行处理后,再 set 回去会发现很多其他的 cell 的 style 也被修改了。其实是因为在 Excel 中,多个 cell 会共用一个 style,这样会就不必为每个 cell存储一个 style。所以虽然我们只想修改一个 cell 的 style,其他 cell 也跟着变了。

     1 // 改一个style,其他的cell 的 style也跟着变了
     2 Cell cell = row.getCell(cellIndex);
     3 
     4 CellStyle style = cell.getRow().getSheet().getWorkbook().createCellStyle();
     5 
     6 style.setBorderBottom(CellStyle.BORDER_THIN);
     7 style.setBorderLeft(CellStyle.BORDER_THIN);
     8 style.setBorderRight(CellStyle.BORDER_THIN);
     9 style.setBorderTop(CellStyle.BORDER_THIN);
    10 style.setBottomBorderColor(IndexedColors.RED.index);
    11 style.setLeftBorderColor(IndexedColors.RED.index);
    12 style.setRightBorderColor(IndexedColors.RED.index);
    13 style.setTopBorderColor(IndexedColors.RED.index);
    14 
    15 cell.setCellStyle(style);

    解决方法

    使用 POI提供的方法 - cloneStyleFrom 来克隆一个 style 出来专门为这个 cell 来设置 style。

     1 Cell cell = row.getCell(cellIndex);
     2 
     3 CellStyle style = cell.getRow().getSheet().getWorkbook().createCellStyle();
     4 style.cloneStyleFrom(cell.getCellStyle());    // 克隆出一个 style
     5 
     6 style.setBorderBottom(CellStyle.BORDER_THIN);
     7 style.setBorderLeft(CellStyle.BORDER_THIN);
     8 style.setBorderRight(CellStyle.BORDER_THIN);
     9 style.setBorderTop(CellStyle.BORDER_THIN);
    10 style.setBottomBorderColor(IndexedColors.RED.index);
    11 style.setLeftBorderColor(IndexedColors.RED.index);
    12 style.setRightBorderColor(IndexedColors.RED.index);
    13 style.setTopBorderColor(IndexedColors.RED.index);
    14 
    15 cell.setCellStyle(style);
  • 相关阅读:
    oracle创建表空间、用户 导入dmp文件
    input中只允许输入数字
    hibernate 中 Criteria 的使用介绍
    将json字符串,转换为对象实体
    unity 修改快捷键的方法 (Ubuntu 12.10)
    openjms的使用 下载、安装、启动、使用、点对点代码demo
    OGNL在页面上的常见11种用法
    jms原理简介网摘
    java中对象转换为json
    Luence初始与简单应用Document的增删改查.
  • 原文地址:https://www.cnblogs.com/yuxiaoqi/p/4759725.html
Copyright © 2020-2023  润新知