C# 用 NPOI 处理 Excel 时,字体影响整个单元格分析

建立了一个 Excel 文件作为模板,其中第一行为模板行,设置了红色字体,在往其中填充数据时,将模板行复制到下面的各行,再在下面各行填充数据。

现在想给第 3 行第 1 个单元格加粗,使用下面的代码:

上面两个方法都是一样的,就是获得 Font,为其设置 Boldweight,只不过一个是从 Workbook 发起,一个是从 Cell 发起。

问题出现了:所有行的第 1 列都被加粗了。

想了一下,可能是由于各个单元格共用一个 Font 造成的。于是尝试下面的代码:

试图通过 SetFont 来以克隆的方式,复制产生一个新的 Font,但是结果依旧,说明 SetFont 并不会克隆,而只是地址赋值。

那我新建一个 Font 怎么样呢?

问题更严重了,不仅所有的照样加粗,原来的红色字体也丢失了,说明虽然使用了新的字体,但是大家是集体使用了新的字体。

新建 Font 不行,新建 CellStyle 呢?

问题更更严重了,不仅字体红色丢失,连其他样式(比如单元格边框),也丢失了,虽然使用了新的样式,但是是大家集体指向新的样式,断不开啊,各个单元格使用的 CellStyle 以及 CellStyle 下面的 Font 都是指向的同一个地址。

到底怎样断开呢?

我在从模板行复制新行时,同时复制了单元格的样式,复制样式时,我使用 cell1.CellStyle = cell2.CellStyle,这一看代码就知道是关联起来的,我发现有一个 CloneStyleFrom,感觉很好用,实际上,根本就没有克隆,还是指向一样的。cell1.CloneStyleFrom(cell2.CellStyle)。

最后,我是没办法了……

你可能感兴趣的