设置条件格式

  1. func (f *File) SetConditionalFormat(sheet, rangeRef string, opts []ConditionalFormatOptions) error

根据给定的工作表名称、单元格坐标区域和格式参数,为单元格值创建条件格式设置规则。条件格式是 Office Excel 的一项功能,它允许您根据特定条件将格式应用于单元格或一系列单元格。

格式参数 Type 选项是必需的参数,它没有默认值。允许的类型值及其相关参数是:

类型参数
cellCriteria
Value
MinValue
MaxValue
dateCriteria
Value
MinValue
MaxValue
time_periodCriteria
textCriteria
Value
averageCriteria
duplicate(none)
unique(none)
topCriteria
Value
bottomCriteria
Value
blanks(none)
no_blanks(none)
errors(none)
no_errors(none)
2_color_scaleMinType
MaxType
MinValue
MaxValue
MinColor
MaxColor
3_color_scaleMinType
MidType
MaxType
MinValue
MidValue
MaxValue
MinColor
MidColor
MaxColor
data_barMinType
MaxType
MinValue
MaxValue
BarBorderColor
BarColor
BarDirection
BarOnly
BarSolid
iconSetIconStyle
ReverseIcons
IconsOnly
formulaCriteria

Criteria 参数用于设置单元格数据的条件格式运算符。它没有默认值,同常与 excelize.ConditionalFormatOptions{Type: "cell"} 一起使用,支持的参数为:

文本描述字符符号表示
between
not between
equal to==
not equal to!=
greater than>
less than<
greater than or equal to>=
less than or equal to<=

可以使用上面表格第一列中的 Office Excel 文本描述字符,或者符号表示方法(betweennot between 没有符号表示法)作为条件格式运算符。下面的相关部分显示了其他条件格式类型的特定标准。

Value:该值通常与 Criteria 参数一起使用,可以用确定的值作为设置单元格条件格式的条件参数:

  1. err := f.SetConditionalFormat("Sheet1", "D1:D10",
  2. []excelize.ConditionalFormatOptions{
  3. {
  4. Type: "cell",
  5. Criteria: ">",
  6. Format: format,
  7. Value: "6",
  8. },
  9. },
  10. )

Value 属性也可以是单元格引用:

  1. err := f.SetConditionalFormat("Sheet1", "D1:D10",
  2. []excelize.ConditionalFormatOptions{
  3. {
  4. Type: "cell",
  5. Criteria: ">",
  6. Format: format,
  7. Value: "$C$1",
  8. },
  9. },
  10. )

类型:Format - Format 参数用于指定满足条件格式标准时将应用于单元格的格式。该参数可以通过 NewConditionalStyle() 方法来创建:

  1. format, err := f.NewConditionalStyle(
  2. &excelize.Style{
  3. Font: &excelize.Font{Color: "9A0511"},
  4. Fill: excelize.Fill{
  5. Type: "pattern", Color: []string{"FEC7CE"}, Pattern: 1,
  6. },
  7. },
  8. )
  9. if err != nil {
  10. fmt.Println(err)
  11. }
  12. err = f.SetConditionalFormat("Sheet1", "D1:D10",
  13. []excelize.ConditionalFormatOptions{
  14. {Type: "cell", Criteria: ">", Format: format, Value: "6"},
  15. },
  16. )

注意:在 Office Excel 中,条件格式叠加在现有单元格格式上,并非所有单元格格式属性都可以修改。无法在条件格式中修改的属性包括:字体名称、字体大小、上标和下标、对角边框、所有对齐属性和所有保护属性。

Office Excel 中内置了一些与条件格式一起使用的默认样式。可以使用以下 excelize 设置实现这些样式效果:

  1. // 浅红填充色深色文本代表较差
  2. format1, err := f.NewConditionalStyle(
  3. &excelize.Style{
  4. Font: &excelize.Font{Color: "9A0511"},
  5. Fill: excelize.Fill{
  6. Type: "pattern", Color: []string{"FEC7CE"}, Pattern: 1,
  7. },
  8. },
  9. )
  10. // 黄填充色深黄色文本代表一般
  11. format2, err := f.NewConditionalStyle(
  12. &excelize.Style{
  13. Font: &excelize.Font{Color: "9B5713"},
  14. Fill: excelize.Fill{
  15. Type: "pattern", Color: []string{"FEEAA0"}, Pattern: 1,
  16. },
  17. },
  18. )
  19. // 绿填充色深绿色文本代表较好
  20. format3, err := f.NewConditionalStyle(
  21. &excelize.Style{
  22. Font: &excelize.Font{Color: "09600B"},
  23. Fill: excelize.Fill{
  24. Type: "pattern", Color: []string{"C7EECF"}, Pattern: 1,
  25. },
  26. },
  27. )

类型:MinValue - 当条件格式 Criteriabetweennot between 时,MinValue 参数用于设置下限值。

  1. // 高亮单元格条件格式规则: between...
  2. err := f.SetConditionalFormat("Sheet1", "A1:A10",
  3. []excelize.ConditionalFormatOptions{
  4. {
  5. Type: "cell",
  6. Criteria: "between",
  7. Format: format,
  8. MinValue: "6",
  9. MaxValue: "8",
  10. },
  11. },
  12. )

类型:MaxValue - 当条件格式 Criteriabetweennot between 时,MaxValue 参数用于设置上限值,参考上面的例子。

类型:average - 平均类型用于指定 Office Excel “最前最后规则”中“经典”样式的“仅高于或低于平均值的数值设置格式”条件格式:

  1. // 最前最后规则:高于平均值...
  2. err := f.SetConditionalFormat("Sheet1", "A1:A10",
  3. []excelize.ConditionalFormatOptions{
  4. {
  5. Type: "average",
  6. Criteria: "=",
  7. Format: format1,
  8. AboveAverage: true,
  9. },
  10. },
  11. )
  12. // 最前最后规则:低于平均值...
  13. err := f.SetConditionalFormat("Sheet1", "B1:B10",
  14. []excelize.ConditionalFormatOptions{
  15. {
  16. Type: "average",
  17. Criteria: "=",
  18. Format: format2,
  19. AboveAverage: false,
  20. },
  21. },
  22. )

类型:duplicate - 用于设置“突出显示单元格规则”中的“重复值 …”:

  1. // 突出显示单元格规则: 重复值...
  2. err := f.SetConditionalFormat("Sheet1", "A1:A10",
  3. []excelize.ConditionalFormatOptions{
  4. {Type: "duplicate", Criteria: "=", Format: format},
  5. },
  6. )

类型:unique - 用于设置“突出显示单元格规则”中“只为以下内容的单元格设置格式”的“特定文本”:

  1. // 突出显示单元格规则,只为以下内容的单元格设置格式: 特定文本 不等于...
  2. err := f.SetConditionalFormat("Sheet1", "A1:A10",
  3. []excelize.ConditionalFormatOptions{
  4. {Type: "unique", Criteria: "=", Format: format},
  5. },
  6. )

类型:top - 用于设置“最前最后规则”中的“前 10 项…”或“前 10% …”:

  1. // 最前最后规则: 前 10 项...
  2. err := f.SetConditionalFormat("Sheet1", "H1:H10",
  3. []excelize.ConditionalFormatOptions{
  4. {
  5. Type: "top",
  6. Criteria: "=",
  7. Format: format,
  8. Value: "6",
  9. },
  10. },
  11. )

设置带有百分比条件的条件格式:

  1. err := f.SetConditionalFormat("Sheet1", "A1:A10",
  2. []excelize.ConditionalFormatOptions{
  3. {
  4. Type: "top",
  5. Criteria: "=",
  6. Format: format,
  7. Value: "6",
  8. Percent: true,
  9. },
  10. },
  11. )

类型:2_color_scale - 用于设置带有“双色刻度”的“色阶样式”条件格式:

  1. // 色阶:双色刻度
  2. err := f.SetConditionalFormat("Sheet1", "A1:A10",
  3. []excelize.ConditionalFormatOptions{
  4. {
  5. Type: "2_color_scale",
  6. Criteria: "=",
  7. MinType: "min",
  8. MaxType: "max",
  9. MinColor: "#F8696B",
  10. MaxColor: "#63BE7B",
  11. },
  12. },
  13. )

双色刻度色阶条件格式可选参数:MinTypeMaxTypeMinValueMaxValueMinColorMaxColor

类型:3_color_scale - 用于设置带有“三色刻度”的“色阶样式”条件格式:

  1. // 色阶:三色刻度
  2. err := f.SetConditionalFormat("Sheet1", "A1:A10",
  3. []excelize.ConditionalFormatOptions{
  4. {
  5. Type: "3_color_scale",
  6. Criteria: "=",
  7. MinType: "min",
  8. MidType: "percentile",
  9. MaxType: "max",
  10. MinColor: "#F8696B",
  11. MidColor: "#FFEB84",
  12. MaxColor: "#63BE7B",
  13. },
  14. },
  15. )

三色刻度色阶条件格式可选参数: MinTypeMidTypeMaxTypeMinValueMidValueMaxValueMinColorMidColorMaxColor

类型:data_bar - 用于设置“数据条”类型的条件格式。

MinType - 参数 MinType 在条件格式类型为 2_color_scale3_color_scaledata_bar 时可用。参数 MidType 在条件格式类型为 3_color_scale 时可用。例如:

  1. // 数据条:渐变填充
  2. err := f.SetConditionalFormat("Sheet1", "K1:K10",
  3. []excelize.ConditionalFormatOptions{
  4. {
  5. Type: "data_bar",
  6. Criteria: "=",
  7. MinType: "min",
  8. MaxType: "max",
  9. BarColor: "#638EC6",
  10. },
  11. },
  12. )

参数 min/mid/max_types 可选值列表:

参数类型
min最低值(仅用于 MinType
num数字
percent百分比
percentile百分点值
formula公式
max最高值(仅用于 MaxType

MidType - 当条件格式类型为 3_color_scale 时使用,与 MinType 用法相同,参考上面的表格。

MaxType - 与 MinType 用法相同,参考上面的表格。

MinValue - 参数 MinValueMaxValue 在条件格式类型为 2_color_scale3_color_scaledata_bar 时可用。参数 MidValue 在条件格式类型为 3_color_scale 时可用。

MidValue - 在条件格式类型为 3_color_scale 时可用,与 MinValue 的用法相同,参考上述文档。

MaxValue - 与 MinValue 的用法相同,参考上述文档。

MinColor - 参数 MinColorMaxColor 在条件格式类型为 2_color_scale3_color_scaledata_bar 时可用。参数 MidColor 在条件格式类型为 3_color_scale 时可用。例如:

  1. // 色阶:三色刻度
  2. err := f.SetConditionalFormat("Sheet1", "B1:B10",
  3. []excelize.ConditionalFormatOptions{
  4. {
  5. Type: "3_color_scale",
  6. Criteria: "=",
  7. MinType: "min",
  8. MidType: "percentile",
  9. MaxType: "max",
  10. MinColor: "#F8696B",
  11. MidColor: "#FFEB84",
  12. MaxColor: "#63BE7B",
  13. },
  14. },
  15. )

MidColor - 当条件格式类型为 3_color_scale 时使用。与 MinColor 用法相同,参考上述文档。

MaxColor - 与 MinColor 用法相同,参考上述文档。

BarColor - 当条件格式类型为 data_bar 时使用。与 MinColor 用法相同,参考上述文档。

BarBorderColor - 用于设置数据条的边框线颜色,该设置仅在 Excel 2010 或更高版本中有效。

BarDirection - 用于设置数据条方向,可选值见下表:

可选值说明
context数据条方向根据电子表格中数据上下文显示
leftToRight从右向左
rightToLeft从左向右

BarOnly - 用于设置是否隐藏单元格中的值,仅显示数据条。

BarSolid - 用于设置数据条是否使用纯色(非渐变)填充样式,该设置仅在 Excel 2010 或更高版本中有效。

IconStyle - 用于设置图标样式,可选值见下表:

可选值
3Arrows
3ArrowsGray
3Flags
3Signs
3Symbols
3Symbols2
3TrafficLights1
3TrafficLights2
4Arrows
4ArrowsGray
4Rating
4RedToBlack
4TrafficLights
5Arrows
5ArrowsGray
5Quarters
5Rating

ReverseIcons - 用于设置是否反转图标次序。

IconsOnly - 用于设置是否隐藏单元格中的值,仅显示图标。

StopIfTrue - 用于设置是否“如果为真则停止”,当一个条件格式规则应用与一个或多个单元格时,如果开启此设置,一旦找到匹配规则的一个单元格,将不会继续查找后续单元格是否匹配。

例如,为名为 Sheet1 的工作表中,通过设置条件格式高亮 A1:D4 区域单元格中的最大值与最小值:

通过设置条件格式高亮区域单元格中的最大值与最小值

  1. func main() {
  2. f := excelize.NewFile()
  3. defer func() {
  4. if err := f.Close(); err != nil {
  5. fmt.Println(err)
  6. }
  7. }()
  8. for r := 1; r <= 4; r++ {
  9. row := []int{
  10. rand.Intn(100), rand.Intn(100), rand.Intn(100), rand.Intn(100),
  11. }
  12. if err := f.SetSheetRow("Sheet1", fmt.Sprintf("A%d", r), &row); err != nil {
  13. fmt.Println(err)
  14. return
  15. }
  16. }
  17. red, err := f.NewConditionalStyle(
  18. &excelize.Style{
  19. Font: &excelize.Font{
  20. Color: "9A0511",
  21. },
  22. Fill: excelize.Fill{
  23. Type: "pattern",
  24. Color: []string{"FEC7CE"},
  25. Pattern: 1,
  26. },
  27. },
  28. )
  29. if err != nil {
  30. fmt.Println(err)
  31. return
  32. }
  33. if err := f.SetConditionalFormat("Sheet1", "A1:D4",
  34. []excelize.ConditionalFormatOptions{
  35. {
  36. Type: "bottom",
  37. Criteria: "=",
  38. Value: "1",
  39. Format: red,
  40. },
  41. },
  42. ); err != nil {
  43. fmt.Println(err)
  44. return
  45. }
  46. green, err := f.NewConditionalStyle(
  47. &excelize.Style{
  48. Font: &excelize.Font{
  49. Color: "09600B",
  50. },
  51. Fill: excelize.Fill{
  52. Type: "pattern",
  53. Color: []string{"C7EECF"},
  54. Pattern: 1,
  55. },
  56. },
  57. )
  58. if err != nil {
  59. fmt.Println(err)
  60. return
  61. }
  62. if err := f.SetConditionalFormat("Sheet1", "A1:D4",
  63. []excelize.ConditionalFormatOptions{
  64. {
  65. Type: "top",
  66. Criteria: "=",
  67. Value: "1",
  68. Format: green,
  69. },
  70. },
  71. ); err != nil {
  72. fmt.Println(err)
  73. return
  74. }
  75. if err := f.SaveAs("Book1.xlsx"); err != nil {
  76. fmt.Println(err)
  77. return
  78. }
  79. }