我正在使用C#中的NPOI从头开始创建excel xlsx文件,并且需要为每个单元格设置特定的单元格样式。但据我所知,每当我更改一个单元格的单元格样式时,它都会修改另一个不相关的单元格。
每次创建单元格时,我都会使用XSSFWorkbook.CreateCellStyle()分配之前创建的Cellstyle。我认为这应该是仅适用于该单元格的特定单元格样式。但是,我发现这不是真的,它似乎与之前或之后创建的单元格相同。尽管我调用XSSFWorkbook.CreateCellStyle()并将其设置为我正在创建的每个单元格。
这是我创建单元格的方式:
for (var i = 0; i < nbCellules; i++)
{
var cell = row.CreateCell(i);
var style = xssfwb.CreateCellStyle();
cell.CellStyle = xssfwb.CreateCellStyle();
cell.CellStyle.BorderLeft = GetLeftBorderStyleFromIndex(i);
cell.CellStyle.BorderRight = GetRightBorderStyleFromIndex(i);
}
使用该代码,我将执行以下操作:
row.GetCell(0).CellStyle.BorderBottom = BorderStyle.Thick;
我认为只应该影响那个特定的单元。
但是,现在每一行的底边框也很粗。
有人知道我错了吗?
答案 0 :(得分:0)
好的,看来我已经了解了发生了什么。
请注意,没有人回答过我,因此这是一个经验性的答案。
如果您这样做,看来:
var cell1 = sheet.GetRow(0).CreateCell(0);
var style = workBook.CreateCellStyle();
style.BorderBottom = BorderStyle.Thick;
var cell2 = sheet.GetRow(1).CreateCell(0);
var style = workBook.CreateCellStyle();
style.BorderBottom = BorderStyle.Thick;
// Now if you decide to change something from the style of cell2
cell2.CellStyle.BorderRight = BorderStyle.Dotted;
// it seems that cell1 now has BorderStyle.Dotted pour son Cellstyle.BorderRight
我不知道到底是怎么回事,但是似乎一旦一个CellStyle受一个单元影响,如果他与另一个单元的CellStyle相同,那么它就不会被克隆,而是被共享。
然后我描述了每个cellStyle,然后将它们影响到一个单元,现在它可以工作了。
请随时与我联系以获取更多详细信息!