如何在F#中使用NPOI修改单元格颜色为自定义值并保留原有样式?
NPOI(F#)设置单元格自定义颜色的样式共享问题
原线程的答案解决了F#中使用NPOI设置单元格自定义颜色时的属性配置问题,但它是通过创建新的ICellStyle对象并覆盖原有样式来实现的。
如果将函数重写为直接修改现有单元格的样式属性(如下代码),会产生副作用:工作表中的大多数单元格都会被染成相同颜色。
let changeCellColorDirectly (cell: ICell) (rgb: byte array) = let xssfCell = cell :?> NPOI.XSSF.UserModel.XSSFCell match xssfCell.CellStyle with | :? NPOI.XSSF.UserModel.XSSFCellStyle as xssfCellStyle -> let color = new NPOI.XSSF.UserModel.XSSFColor(rgb) xssfCellStyle.FillForegroundXSSFColor <- color xssfCellStyle.FillPattern <- NPOI.SS.UserModel.FillPattern.SolidForeground | _ -> failwith "'newCellStyle' cannot be cast to XSSFCellStyle"
我推测拥有相同样式的单元格会共享同一个ICellStyle对象,因此尝试使用ICellStyle的CloneStyleFrom方法解决该问题(如下代码),但结果依旧相同。
let changeCellColorByCloning (cell: ICell) (rgb: byte array) = let xssfCell: NPOI.XSSF.UserModel.XSSFCell = cell :?> NPOI.XSSF.UserModel.XSSFCell let newCellStyle: NPOI.SS.UserModel.ICellStyle = xssfCell.Sheet.Workbook.CreateCellStyle() newCellStyle.CloneStyleFrom(xssfCell.CellStyle) match newCellStyle with | :? NPOI.XSSF.UserModel.XSSFCellStyle as xssfCellStyle -> let color = new NPOI.XSSF.UserModel.XSSFColor(rgb) xssfCellStyle.FillForegroundXSSFColor <- color xssfCellStyle.FillPattern <- NPOI.SS.UserModel.FillPattern.SolidForeground | _ -> failwith "'newCellStyle' cannot be cast to XSSFCellStyle" xssfCell.CellStyle <- newCellStyle
内容的提问来源于stack exchange,提问作者toraritte
相关产品推荐
相关产品推荐

