NPOI Excel / C#需要公式以编程方式更改背景以进行条件格式设置

时间:2018-07-13 14:12:39

标签: c# excel-formula npoi

我正在使用NPOI以编程方式创建Excel文件。要求之一是它需要能够根据值更改单元格的背景-绿色代表良好的数字,红色代表不良的,等等。我让一切工作正常,可以创建公式...但是我终生不能我一个人发现了一个公式,该公式显示了如何更改背景色。无论我如何尝试用Google搜索答案,所有内容都只想显示如何打开Excel并使用条件格式设置向导。我在俯视什么?有什么方法可以查看条件格式设置向导创建的公式,然后将其复制并粘贴到我的代码中?

下面是我为将字段更改为“通过/失败”而设置的示例...但是我的窥视效果就像闪亮的颜色一样……

XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sh = (XSSFSheet)wb.CreateSheet("ACT");

string cf = "IF(" + engCell + (detailRow.RowNum + 1) + @">17,""Pass :)"", ""Fail :("")";
detailRow.CreateCell(detailIdx);
detailRow.GetCell(detailIdx).SetCellType(CellType.Formula);
detailRow.GetCell(detailIdx++).SetCellFormula(cf);

1 个答案:

答案 0 :(得分:2)

我知道了!!!我希望这可以对使用NPOI XSSF进行条件格式化的其他人有所帮助:

XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sh = (XSSFSheet)wb.CreateSheet("ACT");

sh.CreateRow(0).CreateCell(0).SetCellValue(14);
sh.CreateRow(1).CreateCell(0).SetCellValue(20);
sh.CreateRow(2).CreateCell(0).SetCellValue(10);
sh.CreateRow(3).CreateCell(0).SetCellValue(23);
sh.CreateRow(4).CreateCell(0).SetCellValue(19);
sh.CreateRow(5).CreateCell(0).SetCellValue(14);

XSSFSheetConditionalFormatting sCF = (XSSFSheetConditionalFormatting)sh.SheetConditionalFormatting;

//Fill Green if Passing Score
XSSFConditionalFormattingRule cfGreen = 
    (XSSFConditionalFormattingRule)sCF.CreateConditionalFormattingRule(ComparisonOperator.GreaterThanOrEqual, "19");
XSSFPatternFormatting fillGreen = (XSSFPatternFormatting)cfGreen.CreatePatternFormatting();
fillGreen.FillBackgroundColor = IndexedColors.LightGreen.Index;
fillGreen.FillPattern = FillPattern.SolidForeground;

//Fill Red if Passing Score
XSSFConditionalFormattingRule cfRed =
    (XSSFConditionalFormattingRule)sCF.CreateConditionalFormattingRule(ComparisonOperator.LessThan, "19");
XSSFPatternFormatting fillRed = (XSSFPatternFormatting)cfRed.CreatePatternFormatting();
fillRed.FillBackgroundColor = IndexedColors.Red.Index;
fillRed.FillPattern = FillPattern.SolidForeground;

CellRangeAddress[] cfRange = { CellRangeAddress.ValueOf("A1:A6") };
sCF.AddConditionalFormatting(cfRange, cfGreen, cfRed);