问题描述

在使用 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);

POI CellStyle 中样式覆盖问题的更多相关文章

  1. CSS中样式覆盖优先顺序

    原文地址:http://www.3lian.com/edu/2014/09-25/168393.html 层叠优先级是: 浏览器缺省 < 外部样式表 < 内部样式表 < 内联样式 其 ...

  2. 【知识总结】CSS中样式覆盖优先顺序

    层叠样式类型 类型: 1. 浏览器默认样式 2. 浏览器用户自定义样式 3. 外部样式表 4. 内部样式表 5. 内联样式表 顺序: 浏览器默认样式 < 浏览器用户自定义样式 < 外部样式 ...

  3. poi的cellstyle陷阱,样式覆盖

    问题 cell.getCellStyle().setFont(font); 这句话本来只是想设置这一个单元格cell的字体样式,但是实际上却影响了很多个单元格的样式. 问题出在了,Excel模板中这些 ...

  4. css样式表中的样式覆盖顺序(转)

    有时候在写CSS的过程中,某些限制总是不起作用,这就涉及了CSS样式覆盖的问题,如下 Css代码   #navigator { height: 100%; width: 200; position:  ...

  5. POI 设置Excel样式(转)

    POI 设置Excel样式 POI中可能会用到一些需要设置EXCEL单元格格式的操作小结: 先获取工作薄对象: HSSFWorkbook wb = new HSSFWorkbook(); HSSFSh ...

  6. 【转】CSS样式覆盖规则

    大家都知道CSS的全称叫做“层叠样式表”,但估计很多人都不知道“层叠”二字的含义.其实,“层叠”指的就是样式的覆盖,当一个元素被运用上多种样式,并且出现重名的样式属性时,浏览器必须从中选择一个属性值, ...

  7. CSS样式覆盖顺序

    有时候在写CSS的过程中,某些限制总是不起作用,这就涉及了CSS样式覆盖的问题,如下 Css代码   #navigator { height: 100%; width: 200; position:  ...

  8. WPF中样式和行为和触发器

    原文:WPF中样式和行为和触发器 样式简介:样式(style)是组织和重用格式化选项的重要工具,不是使用重复的标记填充XAML,以便设置外边距.内边距.颜色以及字体等细节.而是创建一系列封装所有这些细 ...

  9. 从零开始学习前端开发 — 9、标签嵌套规则及CSS常用样式覆盖

    1. 块级元素可以包含内联元素或某些块级元素,但内联元素却不能包含块级元素,它只能包含其它的内联元素: <div><h1></h1><p></p& ...

随机推荐

  1. spring javabean以及反射机制

    spring是一个管理java对象的一个容器,注入到容器中的对象称之为javabean: spring配置的bean,配置的不是bean而是实例. 反射机制:一个类中的方法,属性等都可以获取本类然后获 ...

  2. jQurey轮播插件slides简单使用教程

    动态演示地址: http://www.zqunyan.com/zgproduction/slidesjs/index.html 简介就不多说了,网上有很多,复制粘贴没意义,会想到用这个插件就代表已经了 ...

  3. 中心极限定理(为什么y服从高斯分布)

    因为每一条数据都服从IID原则: 根据中心极限定理,当数据增加的时候,样本均值的分布慢慢变成正态分布 不管分布式什么分布,累加起来都是高斯分布 As sum increases, sum of non ...

  4. Layman CSS3+H5实现上下垂直居中的几种主要方法

    方法1:通过 translate 移位来实现 H5+CSS3: <div style="width: 100%; height: 100%; margin:0; padding: 0; ...

  5. Trie树【字典树】浅谈

    最近随洛谷日报看了一下Trie树,来写一篇学习笔记. Trie树:支持字符串前缀查询等(目前我就学了这些qwq) 一般题型就是给定一个模式串,几个文本串,询问能够匹配前缀的文本串数量. 首先,来定义下 ...

  6. Python中字符串有哪些常用操作?纯干货超详细

  7. shell-的变量-局部变量

    1. 定义本地变量 本地变量在用户当前的shell生产期的脚本中使用.例如,本地变量OLDBOY取值为ett098,这个值只在用户当前shell生存期中有意义.如果在shell中启动另一个进程或退出, ...

  8. Fiddler抓包工具 请求图标为一个锁的图标的设置

    第一步,Fiddler抓包的数据 前面的都是一个锁的图标,的设置方法, 然后 点击打开 按此设置图一 在图二, 图三. 其他默认就好

  9. java的各种集合为什么不安全(List、Set、Map)以及代替方案

    我们已经知道多线程下会有各种不安全的问题,都知道并发的基本解决方案,这里对出现错误的情况进行一个实际模拟,以此能够联想到具体的生产环境中. 一.List 的不安全 1.1 问题 看一段代码: publ ...

  10. 【C/C++编程入门学习】同样是数据类型,链表对比数组?哪一个更香?

    说起链表,第一反应:链表是一种数据类型!它可以用来存储同种类型多个批量数据.   有了这种认知,很容易去联想到数组,它也是一种数据类型,也可以用来存储同种类型的批量数据.初学者往往对数组的印象比较好, ...