设置条件格式

  1. func (f *File) SetConditionalFormat(sheet, area, formatSet string) error

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

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

类型参数
cellcriteria
value
minimum
maximum
datecriteria
value
minimum
maximum
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_scalemin_type
max_type
min_value
max_value
min_color
max_color
3_color_scalemin_type
mid_type
max_type
min_value
mid_value
max_value
min_color
mid_color
max_color
data_barmin_type
max_type
min_value
max_value
bar_color
formulacriteria

criteria 参数用于设置单元格数据的条件格式运算符。它没有默认值,同常与 {"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. f.SetConditionalFormat("Sheet1", "D1:D10", fmt.Sprintf(`[{"type":"cell","criteria":">","format":%d,"value":"6"}]`, format))

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

  1. f.SetConditionalFormat("Sheet1", "D1:D10", fmt.Sprintf(`[{"type":"cell","criteria":">","format":%d,"value":"$C$1"}]`, format))

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

  1. format, err = f.NewConditionalStyle(`{"font":{"color":"#9A0511"},"fill":{"type":"pattern","color":["#FEC7CE"],"pattern":1}}`)
  2. if err != nil {
  3. println(err.Error())
  4. }
  5. f.SetConditionalFormat("Sheet1", "A1:A10", fmt.Sprintf(`[{"type":"cell","criteria":">","format":%d,"value":"6"}]`, format))

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

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

  1. // 浅红填充色深色文本代表较差
  2. format1, err = f.NewConditionalStyle(`{"font":{"color":"#9A0511"},"fill":{"type":"pattern","color":["#FEC7CE"],"pattern":1}}`)
  3. // 黄填充色深黄色文本代表一般
  4. format2, err = f.NewConditionalStyle(`{"font":{"color":"#9B5713"},"fill":{"type":"pattern","color":["#FEEAA0"],"pattern":1}}`)
  5. // 绿填充色深绿色文本代表较好
  6. format3, err = f.NewConditionalStyle(`{"font":{"color":"#09600B"},"fill":{"type":"pattern","color":["#C7EECF"],"pattern":1}}`)

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

  1. // 高亮单元格条件格式规则: between...
  2. f.SetConditionalFormat("Sheet1", "A1:A10", fmt.Sprintf(`[{"type":"cell","criteria":"between","format":%d,"minimum":"6","maximum":"8"}]`, format))

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

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

  1. // 最前最后规则:高于平均值...
  2. f.SetConditionalFormat("Sheet1", "A1:A10", fmt.Sprintf(`[{"type":"average","criteria":"=","format":%d, "above_average": true}]`, format1))
  3. // 最前最后规则:低于平均值...
  4. f.SetConditionalFormat("Sheet1", "B1:B10", fmt.Sprintf(`[{"type":"average","criteria":"=","format":%d, "above_average": false}]`, format2))

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

  1. // 突出显示单元格规则: 重复值...
  2. f.SetConditionalFormat("Sheet1", "A1:A10", fmt.Sprintf(`[{"type":"duplicate","criteria":"=","format":%d}]`, format))

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

  1. // 突出显示单元格规则,只为以下内容的单元格设置格式: 特定文本 不等于...
  2. f.SetConditionalFormat("Sheet1", "A1:A10", fmt.Sprintf(`[{"type":"unique","criteria":"=","format":%d}]`, format))

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

  1. // 最前最后规则: 前 10 项...
  2. f.SetConditionalFormat("Sheet1", "H1:H10", fmt.Sprintf(`[{"type":"top","criteria":"=","format":%d,"value":"6"}]`, format))

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

  1. f.SetConditionalFormat("Sheet1", "A1:A10", fmt.Sprintf(`[{"type":"top","criteria":"=","format":%d,"value":"6","percent":true}]`, format))

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

  1. // 色阶:双色刻度
  2. f.SetConditionalFormat("Sheet1", "A1:A10", `[{"type":"2_color_scale","criteria":"=","min_type":"min","max_type":"max","min_color":"#F8696B","max_color":"#63BE7B"}]`)

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

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

  1. // 色阶:三色刻度
  2. f.SetConditionalFormat("Sheet1", "A1:A10", `[{"type":"3_color_scale","criteria":"=","min_type":"min","mid_type":"percentile","max_type":"max","min_color":"#F8696B","mid_color":"#FFEB84","max_color":"#63BE7B"}]`)

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

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

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

  1. // 数据条:渐变填充
  2. f.SetConditionalFormat("Sheet1", "K1:K10", `[{"type":"data_bar", "criteria":"=", "min_type":"min","max_type":"max","bar_color":"#638EC6"}]`)

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

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

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

max_type - 与 min_type 用法相同,参考上面的表格。

min_value - 参数 min_valuemax_value 在条件格式类型为 2_color_scale3_color_scaledata_bar 时可用。参数 mid_value 在条件格式类型为 3_color_scale 时可用。

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

max_value - 与 min_value 的用法相同,参考上述文档。

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

  1. // 色阶:三色刻度
  2. f.SetConditionalFormat("Sheet1", "B1:B10", `[{"type":"3_color_scale","criteria":"=","min_type":"min","mid_type":"percentile","max_type":"max","min_color":"#F8696B","mid_color":"#FFEB84","max_color":"#63BE7B"}]`)

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

max_color - 与 min_color 用法相同,参考上述文档。

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