我在使用 NPOI 时遇到的问题 - CellStyle (引用同一个实例)

NPOI 版本信息:

Binary: 2.1.3.1

Source Code: https://github.com/tonyqus/npoi (2015-06-15)

 

本期问题:CellStyle (引用同一个实例)

介绍 NPOI 中设置单元格样式时,网上大部分示例都是创建一个新的 ICellStyle,并将其赋给 Cell 的 CellStyle 属性。

 

一般操作量较少时都没什么问题。但是当重复次数很多时,会导致无法再创建新的 ICellStyle。(貌似一个 Workbook 允许的 CellStyle 数量最大值在4000左右)。

 

一般,(Office 文件本身结构设计)一个 Workbook 中会有一些 Cell 具有相同的 CellStyle。这些 Cell 会引用同一个 CellStyle 实例(准确的说是同一条格式记录数据),而不是每个 Cell 各自 hold 住一个。很多属性都是通过这种方式设置的,如颜色,字体等。应该尽量重用这些已有的实例

 

某些情况会比较麻烦:

a) 如果获取某个 Cell 的 CellStyle 属性,并对该 ICellStyle 实例做修改,会导致相应的记录格式的那条数据被修改,导致所有引用该数据的单元格样式都随之更改。

 

b) 如果创建新的 CellStyle 并赋给 Cell,会替换原来的样式数据。如果只想修改部分样式,并保留所有其它样式,就不得不复制所有这些需要保留的子项。

 

如何才能方便地设置单元格样式,并尽量减少相同样式的冗余是比较麻烦的。一般较好的做法是:把样式设置等(静态部分)在 Office 工具中完成(设置模板),程序(动态部分)载入模板文件,只做一些值的填充工作。

你可能感兴趣的:(C#,.Net,开源软件)