设置条件格式
func (f *File) SetConditionalFormat(sheet, rangeRef string, opts []ConditionalFormatOptions) error
根据给定的工作表名称、单元格坐标区域和格式参数,为单元格值创建条件格式设置规则。条件格式是 Office Excel 的一项功能,它允许您根据特定条件将格式应用于单元格或一系列单元格。
格式参数 Type
选项是必需的参数,它没有默认值。允许的类型值及其相关参数是:
类型 | 参数 |
---|---|
cell | Criteria |
Value | |
MinValue | |
MaxValue | |
date | Criteria |
Value | |
MinValue | |
MaxValue | |
time_period | Criteria |
text | Criteria |
Value | |
average | Criteria |
duplicate | (none) |
unique | (none) |
top | Criteria |
Value | |
bottom | Criteria |
Value | |
blanks | (none) |
no_blanks | (none) |
errors | (none) |
no_errors | (none) |
2_color_scale | MinType |
MaxType | |
MinValue | |
MaxValue | |
MinColor | |
MaxColor | |
3_color_scale | MinType |
MidType | |
MaxType | |
MinValue | |
MidValue | |
MaxValue | |
MinColor | |
MidColor | |
MaxColor | |
data_bar | MinType |
MaxType | |
MinValue | |
MaxValue | |
BarBorderColor | |
BarColor | |
BarDirection | |
BarOnly | |
BarSolid | |
iconSet | IconStyle |
ReverseIcons | |
IconsOnly | |
formula | Criteria |
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 文本描述字符,或者符号表示方法(between
与 not between
没有符号表示法)作为条件格式运算符。下面的相关部分显示了其他条件格式类型的特定标准。
Value
:该值通常与 Criteria
参数一起使用,可以用确定的值作为设置单元格条件格式的条件参数:
err := f.SetConditionalFormat("Sheet1", "D1:D10",
[]excelize.ConditionalFormatOptions{
{
Type: "cell",
Criteria: ">",
Format: format,
Value: "6",
},
},
)
Value
属性也可以是单元格引用:
err := f.SetConditionalFormat("Sheet1", "D1:D10",
[]excelize.ConditionalFormatOptions{
{
Type: "cell",
Criteria: ">",
Format: format,
Value: "$C$1",
},
},
)
类型:Format
- Format
参数用于指定满足条件格式标准时将应用于单元格的格式。该参数可以通过 NewConditionalStyle() 方法来创建:
format, err := f.NewConditionalStyle(
&excelize.Style{
Font: &excelize.Font{Color: "9A0511"},
Fill: excelize.Fill{
Type: "pattern", Color: []string{"FEC7CE"}, Pattern: 1,
},
},
)
if err != nil {
fmt.Println(err)
}
err = f.SetConditionalFormat("Sheet1", "D1:D10",
[]excelize.ConditionalFormatOptions{
{Type: "cell", Criteria: ">", Format: format, Value: "6"},
},
)
注意:在 Office Excel 中,条件格式叠加在现有单元格格式上,并非所有单元格格式属性都可以修改。无法在条件格式中修改的属性包括:字体名称、字体大小、上标和下标、对角边框、所有对齐属性和所有保护属性。
Office Excel 中内置了一些与条件格式一起使用的默认样式。可以使用以下 excelize 设置实现这些样式效果:
// 浅红填充色深色文本代表较差
format1, err := f.NewConditionalStyle(
&excelize.Style{
Font: &excelize.Font{Color: "9A0511"},
Fill: excelize.Fill{
Type: "pattern", Color: []string{"FEC7CE"}, Pattern: 1,
},
},
)
// 黄填充色深黄色文本代表一般
format2, err := f.NewConditionalStyle(
&excelize.Style{
Font: &excelize.Font{Color: "9B5713"},
Fill: excelize.Fill{
Type: "pattern", Color: []string{"FEEAA0"}, Pattern: 1,
},
},
)
// 绿填充色深绿色文本代表较好
format3, err := f.NewConditionalStyle(
&excelize.Style{
Font: &excelize.Font{Color: "09600B"},
Fill: excelize.Fill{
Type: "pattern", Color: []string{"C7EECF"}, Pattern: 1,
},
},
)
类型:MinValue
- 当条件格式 Criteria
为 between
或 not between
时,MinValue
参数用于设置下限值。
// 高亮单元格条件格式规则: between...
err := f.SetConditionalFormat("Sheet1", "A1:A10",
[]excelize.ConditionalFormatOptions{
{
Type: "cell",
Criteria: "between",
Format: format,
MinValue: "6",
MaxValue: "8",
},
},
)
类型:MaxValue
- 当条件格式 Criteria
为 between
或 not between
时,MaxValue
参数用于设置上限值,参考上面的例子。
类型:average
- 平均类型用于指定 Office Excel “最前最后规则”中“经典”样式的“仅高于或低于平均值的数值设置格式”条件格式:
// 最前最后规则:高于平均值...
err := f.SetConditionalFormat("Sheet1", "A1:A10",
[]excelize.ConditionalFormatOptions{
{
Type: "average",
Criteria: "=",
Format: format1,
AboveAverage: true,
},
},
)
// 最前最后规则:低于平均值...
err := f.SetConditionalFormat("Sheet1", "B1:B10",
[]excelize.ConditionalFormatOptions{
{
Type: "average",
Criteria: "=",
Format: format2,
AboveAverage: false,
},
},
)
类型:duplicate
- 用于设置“突出显示单元格规则”中的“重复值 …”:
// 突出显示单元格规则: 重复值...
err := f.SetConditionalFormat("Sheet1", "A1:A10",
[]excelize.ConditionalFormatOptions{
{Type: "duplicate", Criteria: "=", Format: format},
},
)
类型:unique
- 用于设置“突出显示单元格规则”中“只为以下内容的单元格设置格式”的“特定文本”:
// 突出显示单元格规则,只为以下内容的单元格设置格式: 特定文本 不等于...
err := f.SetConditionalFormat("Sheet1", "A1:A10",
[]excelize.ConditionalFormatOptions{
{Type: "unique", Criteria: "=", Format: format},
},
)
类型:top
- 用于设置“最前最后规则”中的“前 10 项…”或“前 10% …”:
// 最前最后规则: 前 10 项...
err := f.SetConditionalFormat("Sheet1", "H1:H10",
[]excelize.ConditionalFormatOptions{
{
Type: "top",
Criteria: "=",
Format: format,
Value: "6",
},
},
)
设置带有百分比条件的条件格式:
err := f.SetConditionalFormat("Sheet1", "A1:A10",
[]excelize.ConditionalFormatOptions{
{
Type: "top",
Criteria: "=",
Format: format,
Value: "6",
Percent: true,
},
},
)
类型:2_color_scale
- 用于设置带有“双色刻度”的“色阶样式”条件格式:
// 色阶:双色刻度
err := f.SetConditionalFormat("Sheet1", "A1:A10",
[]excelize.ConditionalFormatOptions{
{
Type: "2_color_scale",
Criteria: "=",
MinType: "min",
MaxType: "max",
MinColor: "#F8696B",
MaxColor: "#63BE7B",
},
},
)
双色刻度色阶条件格式可选参数:MinType
、MaxType
、MinValue
、MaxValue
、MinColor
和 MaxColor
。
类型:3_color_scale
- 用于设置带有“三色刻度”的“色阶样式”条件格式:
// 色阶:三色刻度
err := f.SetConditionalFormat("Sheet1", "A1:A10",
[]excelize.ConditionalFormatOptions{
{
Type: "3_color_scale",
Criteria: "=",
MinType: "min",
MidType: "percentile",
MaxType: "max",
MinColor: "#F8696B",
MidColor: "#FFEB84",
MaxColor: "#63BE7B",
},
},
)
三色刻度色阶条件格式可选参数: MinType
、MidType
、MaxType
、MinValue
、MidValue
、MaxValue
、MinColor
、MidColor
和 MaxColor
。
类型:data_bar
- 用于设置“数据条”类型的条件格式。
MinType
- 参数 MinType
在条件格式类型为 2_color_scale
、3_color_scale
或 data_bar
时可用。参数 MidType
在条件格式类型为 3_color_scale
时可用。例如:
// 数据条:渐变填充
err := f.SetConditionalFormat("Sheet1", "K1:K10",
[]excelize.ConditionalFormatOptions{
{
Type: "data_bar",
Criteria: "=",
MinType: "min",
MaxType: "max",
BarColor: "#638EC6",
},
},
)
参数 min/mid/max_types
可选值列表:
参数 | 类型 |
---|---|
min | 最低值(仅用于 MinType ) |
num | 数字 |
percent | 百分比 |
percentile | 百分点值 |
formula | 公式 |
max | 最高值(仅用于 MaxType ) |
MidType
- 当条件格式类型为 3_color_scale
时使用,与 MinType
用法相同,参考上面的表格。
MaxType
- 与 MinType
用法相同,参考上面的表格。
MinValue
- 参数 MinValue
和 MaxValue
在条件格式类型为 2_color_scale
、3_color_scale
或 data_bar
时可用。参数 MidValue
在条件格式类型为 3_color_scale
时可用。
MidValue
- 在条件格式类型为 3_color_scale
时可用,与 MinValue
的用法相同,参考上述文档。
MaxValue
- 与 MinValue
的用法相同,参考上述文档。
MinColor
- 参数 MinColor
和 MaxColor
在条件格式类型为 2_color_scale
、3_color_scale
或 data_bar
时可用。参数 MidColor
在条件格式类型为 3_color_scale
时可用。例如:
// 色阶:三色刻度
err := f.SetConditionalFormat("Sheet1", "B1:B10",
[]excelize.ConditionalFormatOptions{
{
Type: "3_color_scale",
Criteria: "=",
MinType: "min",
MidType: "percentile",
MaxType: "max",
MinColor: "#F8696B",
MidColor: "#FFEB84",
MaxColor: "#63BE7B",
},
},
)
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
区域单元格中的最大值与最小值:
func main() {
f := excelize.NewFile()
defer func() {
if err := f.Close(); err != nil {
fmt.Println(err)
}
}()
for r := 1; r <= 4; r++ {
row := []int{
rand.Intn(100), rand.Intn(100), rand.Intn(100), rand.Intn(100),
}
if err := f.SetSheetRow("Sheet1", fmt.Sprintf("A%d", r), &row); err != nil {
fmt.Println(err)
return
}
}
red, err := f.NewConditionalStyle(
&excelize.Style{
Font: &excelize.Font{
Color: "9A0511",
},
Fill: excelize.Fill{
Type: "pattern",
Color: []string{"FEC7CE"},
Pattern: 1,
},
},
)
if err != nil {
fmt.Println(err)
return
}
if err := f.SetConditionalFormat("Sheet1", "A1:D4",
[]excelize.ConditionalFormatOptions{
{
Type: "bottom",
Criteria: "=",
Value: "1",
Format: red,
},
},
); err != nil {
fmt.Println(err)
return
}
green, err := f.NewConditionalStyle(
&excelize.Style{
Font: &excelize.Font{
Color: "09600B",
},
Fill: excelize.Fill{
Type: "pattern",
Color: []string{"C7EECF"},
Pattern: 1,
},
},
)
if err != nil {
fmt.Println(err)
return
}
if err := f.SetConditionalFormat("Sheet1", "A1:D4",
[]excelize.ConditionalFormatOptions{
{
Type: "top",
Criteria: "=",
Value: "1",
Format: green,
},
},
); err != nil {
fmt.Println(err)
return
}
if err := f.SaveAs("Book1.xlsx"); err != nil {
fmt.Println(err)
return
}
}