如何使用 C# NPOI 在 Excel 中设置条件格式图标集? (C#、NPOI、Excel、MultistateFormatting、IconSet、IconSet 阈值)

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

我想使用 C# NPOI 将条件交通灯图标集添加到 Excel 文件中,该图标集会根据单元格中的值而变化。但不幸的是,没有关于此功能的良好指南。

我尝试了几种方法,但远程都不起作用。

c# excel npoi
1个回答
0
投票

由于我找不到任何关于如何在 NPOI 中设置具有条件格式的 Excel 图标集的有用帖子或指南,我想发布受此 answer 启发的解决方案。

您可以使用此代码格式化 NPOI 中的图标集(我使用的是 NPOI 2.5.6):

using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.OpenXmlFormats.Spreadsheet;

var cf = oSheet.GetCTWorksheet().AddNewConditionalFormatting(); //oSheet is an XSSFSheet.

cf.sqref = "C1"; //Or "C1:C2"

var rule = cf.AddNewCfRule();

rule.type = ST_CfType.iconSet;

rule.priority = 1;

var IconSet = rule.AddNewIconSet();

IconSet.iconSet = ST_IconSetType.Item3Signs; //You can choose another IconSet type here.

IconSet.showValue = true;
IconSet.reverse = true; //Reverses the default order of icons.

var value_1 = IconSet.AddNewCfvo();

value_1.type = ST_CfvoType.num; //Depending on what you need, you can choose precentages or other types. I found that using numbers when defining thresholds works better.
value_1.val = "0"; //Why you should start with a zero is further below.

var value_2 = IconSet.AddNewCfvo();
value_2.type = ST_CfvoType.num;

value_2.val = "10";

var value_3 = IconSet.AddNewCfvo();

value_3.type = ST_CfvoType.num;

value_3.val = "20";
      

为什么需要在阈值中添加零?

我发现 Excel 工作表的 XML 文件中定义了正确的图标集,如下所示:

<cfRule type="iconSet" priority="1">

    <iconSet iconSet="3Signs" reverse="1">

        <cfvo type="num" val="0" />
        <cfvo type="num" val="10" />
        <cfvo type="num" val="20" />

    </iconSet>

</cfRule>
关于阈值的注释:

由于阈值是一个字符串值,因此在将数值转换为字符串时应该小心。例如,浮点数在转换为字符串时可以接收科学记数法或逗号。

为了正确转换浮点数,您应该摆脱科学记数法并将逗号替换为点,因为 Excel 不接受科学记数法和逗号。

帮助我克服了这个问题。

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