如何在 C# (NPOI) 中使用 xssf 创建特定的单元格样式
How to create specific cellstyles with xssf in c# (NPOI)
我正在使用 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;
我认为只有那个特定的单元格应该受到影响。
但是,现在每一行都有一个粗底边框。
有人知道我哪里错了吗?
好的,看来我明白是怎么回事了。
请注意,没有人回答我任何问题,所以这是一个经验性的答案。
似乎如果你这样做:
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影响到一个cell,如果他和另一个cell的CellStyle一样,那么就不是克隆,而是共享。
然后我描述了每个 cellStyle,然后再将它们影响到一个单元格,现在它起作用了。
欢迎联系我了解更多详情!
我正在使用 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;
我认为只有那个特定的单元格应该受到影响。
但是,现在每一行都有一个粗底边框。
有人知道我哪里错了吗?
好的,看来我明白是怎么回事了。
请注意,没有人回答我任何问题,所以这是一个经验性的答案。
似乎如果你这样做:
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影响到一个cell,如果他和另一个cell的CellStyle一样,那么就不是克隆,而是共享。
然后我描述了每个 cellStyle,然后再将它们影响到一个单元格,现在它起作用了。
欢迎联系我了解更多详情!