如何使用 F# 中的 NPOI 将单元格颜色设置为用户定义的值?

问题描述 投票:0回答:1

据我所知(至少从 F# 来看),单元格只能使用预定义的

NPOI.SS.UserModel.IndexedColors
进行着色。从可用的方法/属性中,

val it: ICellStyle =
  NPOI.XSSF.UserModel.XSSFCellStyle
    { ...
     FillBackgroundColor = -494s;
     FillBackgroundColorColor = NPOI.XSSF.UserModel.XSSFColor;
     FillBackgroundXSSFColor = NPOI.XSSF.UserModel.XSSFColor;
     FillForegroundColor = 64s;
     FillForegroundColorColor = null;
     FillForegroundXSSFColor = null;
     FillPattern = NoFill;
    ...

只有

FillBackgroundColor
FillForegroundColor
FillPattern
可以设置为
int16
值,该值对应于
IndexedColors
值,其余模式是不可变的。我可以创建自定义

new NPOI.XSSF.UserModel.XSSFColor([|255uy; 192uy; 150uy|])

颜色,但我根本不知道如何将其分配给现有的单元格样式或全新的单元格样式。我能找到的所有文章也只使用

IndexedColors
(例如,123、)。

我错过了一些明显的东西还是这确实不可能?

在此上下文中,术语“前景”和“背景”的含义也具有误导性,但这是从 Apache POI 继承的,并且在线上有详细记录(例如,herehere)。


edit:找到了另外两个 C# 解决方案(thisthis),通过将

FillBackgroundColor
设置为自定义
XSSFColor
来实现显而易见的效果,但是,我再次不知道如何在 F# 中执行此操作:

> cs;;
val it: ICellStyle =
  NPOI.XSSF.UserModel.XSSFCellStyle
    {Alignment = General;
     BorderBottom = Thin;
     BorderDiagonal = None;
     BorderDiagonalColor = 8s;
     BorderDiagonalLineStyle = None;
     BorderLeft = Thin;
     BorderRight = Thin;
     BorderTop = Thin;
     BottomBorderColor = 64s;
     BottomBorderXSSFColor = NPOI.XSSF.UserModel.XSSFColor;
     DataFormat = 0s;
     DiagonalBorderXSSFColor = null;
     FillBackgroundColor = -494s;
     FillBackgroundColorColor = NPOI.XSSF.UserModel.XSSFColor;
     FillBackgroundXSSFColor = NPOI.XSSF.UserModel.XSSFColor;
     FillForegroundColor = 0s;
     FillForegroundColorColor = NPOI.XSSF.UserModel.XSSFColor;
     FillForegroundXSSFColor = NPOI.XSSF.UserModel.XSSFColor;
     FillPattern = NoFill;
     FontIndex = 3s;
     Indention = 0s;
     Index = 43s;
     IsHidden = false;
     IsLocked = false;
     LeftBorderColor = 64s;
     LeftBorderXSSFColor = NPOI.XSSF.UserModel.XSSFColor;
     RightBorderColor = 64s;
     RightBorderXSSFColor = NPOI.XSSF.UserModel.XSSFColor;
     Rotation = 0s;
     ShrinkToFit = false;
     TopBorderColor = 64s;
     TopBorderXSSFColor = NPOI.XSSF.UserModel.XSSFColor;
     VerticalAlignment = Bottom;
     WrapText = false;}

> c;;
val it: XSSFColor =
  NPOI.XSSF.UserModel.XSSFColor {ARGB = [|255uy; 255uy; 192uy; 150uy|];
                                 ARGBHex = "FFFFC096";
                                 HasAlpha = false;
                                 HasTint = false;
                                 Index = 0s;
                                 Indexed = 0s;
                                 IsAuto = false;
                                 IsIndexed = false;
                                 IsRGB = true;
                                 IsThemed = false;
                                 RGB = [|255uy; 192uy; 150uy|];
                                 RGBWithTint = [|255uy; 192uy; 150uy|];
                                 Theme = 0;
                                 Tint = 0.0;}

> cs.FillBackgroundColor;;   
val it: int16 = -494s

> cs.FillBackgroundColor <- c;;

  cs.FillBackgroundColor <- c;;
  --------------------------^

/Users/toraritte/dev/clones/dotNET/slate-excel-reports/stdin(332,27): error FS0001: This expression was expected to have type
    'int16'    
but here has type
    'XSSFColor'    

> cs.FillBackgroundColorColor;;
val it: IColor = NPOI.XSSF.UserModel.XSSFColor {ARGB = null;
                                                ARGBHex = null;
                                                HasAlpha = false;
                                                HasTint = false;
                                                Index = -494s;
                                                Indexed = -494s;
                                                IsAuto = false;
                                                IsIndexed = true;
                                                IsRGB = false;
                                                IsThemed = false;
                                                RGB = null;
                                                RGBWithTint = null;
                                                Theme = 0;
                                                Tint = 0.0;}

> cs.FillBackgroundColorColor <- c;;

  cs.FillBackgroundColorColor <- c;;
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^

/Users/toraritte/dev/clones/dotNET/slate-excel-reports/stdin(334,1): error FS0810: Property 'FillBackgroundColorColor' cannot be set
f# npoi
1个回答
0
投票

您是否在问在 F# 中初始化类对象时如何为属性赋值?如果是这样,answer 是将

property = value
形式的赋值列表附加到构造函数的参数列表中,如下所示:

NPOI.XSSF.UserModel.XSSFCellStyle(
     FillBackgroundColor = -494s,
     FillBackgroundColorColor = NPOI.XSSF.UserModel.XSSFColor,
     FillBackgroundXSSFColor = NPOI.XSSF.UserModel.XSSFColor,
     FillForegroundColor = 64s,
     FillForegroundColorColor = null,
     FillForegroundXSSFColor = null,
     FillPattern = NoFill
     ..

注意:我没有尝试过运行这段代码,而且我对 NPOI 不熟悉,所以我可能会误解你的问题。

© www.soinside.com 2019 - 2024. All rights reserved.