工具函数

工具函数

《Excelize 权威指南》图书出版,网上购买方式:人民邮电出版社 | 异步社区 | 天猫 | 京东 | 当当 | 亚马逊 | 微店 | 抖音

ZipWriter 定义了一个用于将文件写入 ZIP 压缩包的接口。它提供了在压缩包中创建新文件、从文件系统添加文件以及在写入完成后关闭压缩包的方法。

type ZipWriter interface {
    Create(name string) (io.Writer, error)
    AddFS(fsys fs.FS) error
    Close() error
}

创建表格

func (f *File) AddTable(sheet string, table *Table) error

根据给定的工作表名、单元格坐标区域和条件格式创建表格。

  • 例1,在名为 Sheet1 的工作表 A1:D5 区域创建表格:

创建表格

err := f.AddTable("Sheet1", &excelize.Table{Range: "A1:D5"})
  • 例2,在名为 Sheet2 的工作表 F2:H6 区域创建带有条件格式的表格:

创建带有条件格式的表格

disable := false
err := f.AddTable("Sheet2", &excelize.Table{
    Range:             "F2:H6",
    Name:              "table",
    StyleName:         "TableStyleMedium2",
    ShowFirstColumn:   true,
    ShowLastColumn:    true,
    ShowRowStripes:    &disable,
    ShowColumnStripes: true,
})

注意,表格坐标区域至少需要包含两行:字符型的标题行和内容行。每列标题行的字符需保证是唯一的,并且必须在调用 AddTable 函数前设置表格的标题行数据。多个表格的坐标区域不能有交集。

可选参数 Name 用以设置自定义表格名称,同一个工作表内的表格名称应该是唯一的。

Excelize 支持的表格样式 StyleName 参数:

TableStyleLight1 - TableStyleLight21
TableStyleMedium1 - TableStyleMedium28
TableStyleDark1 - TableStyleDark11
``` 索引| 预览| 索引| 预览| 索引| 预览  
---|---|---|---|---|---  
|  ![工具函数 - 图3](https://static.bookstack.cn/projects/excelize-2.10-zh/2bc9bc6b71f9f7f7799041b3c6d25dfa.png) | TableStyleLight1|  ![工具函数 - 图4](https://static.bookstack.cn/projects/excelize-2.10-zh/90d1218de890cb3f4d2314d20b5a3258.png) | TableStyleLight2|  ![工具函数 - 图5](https://static.bookstack.cn/projects/excelize-2.10-zh/acb7af4ac12557a4f6e6feb27d8f3f8f.png)   
TableStyleLight3|  ![工具函数 - 图6](https://static.bookstack.cn/projects/excelize-2.10-zh/cc8a67c57e290c24898ddf27dd0e88ee.png) | TableStyleLight4|  ![工具函数 - 图7](https://static.bookstack.cn/projects/excelize-2.10-zh/ae134cd35b0fb02d3700a05c014546f1.png) | TableStyleLight5|  ![工具函数 - 图8](https://static.bookstack.cn/projects/excelize-2.10-zh/6c37e52b0bf1f0a7a647165f493607e2.png)   
TableStyleLight6|  ![工具函数 - 图9](https://static.bookstack.cn/projects/excelize-2.10-zh/dfe76ed1d7a56066075b542776221237.png) | TableStyleLight7|  ![工具函数 - 图10](https://static.bookstack.cn/projects/excelize-2.10-zh/3f896c2b71749d79ca0840a9b314da7c.png) | TableStyleLight8|  ![工具函数 - 图11](https://static.bookstack.cn/projects/excelize-2.10-zh/47dd3cf24b5a6421b0940c4990dc1148.png)   
TableStyleLight9|  ![工具函数 - 图12](https://static.bookstack.cn/projects/excelize-2.10-zh/0523e1b92bbf52baa5713ae941a5ce9a.png) | TableStyleLight10|  ![工具函数 - 图13](https://static.bookstack.cn/projects/excelize-2.10-zh/91bde5ba6e7cc4c5a1e37abed7ca4583.png) | TableStyleLight11|  ![工具函数 - 图14](https://static.bookstack.cn/projects/excelize-2.10-zh/705ab06d4d8d2c3e6ebbe577dbe7e7a1.png)   
TableStyleLight12|  ![工具函数 - 图15](https://static.bookstack.cn/projects/excelize-2.10-zh/2d133d1288b4069ab083da058df6b450.png) | TableStyleLight13|  ![工具函数 - 图16](https://static.bookstack.cn/projects/excelize-2.10-zh/e2eb99ee1f7d191d5c3dc0e8b8295fee.png) | TableStyleLight14|  ![工具函数 - 图17](https://static.bookstack.cn/projects/excelize-2.10-zh/a46ba343c61111a1884e5f1473640c8c.png)   
TableStyleLight15|  ![工具函数 - 图18](https://static.bookstack.cn/projects/excelize-2.10-zh/e3b65718cf7e9ddfcc82655c0b3a370a.png) | TableStyleLight16|  ![工具函数 - 图19](https://static.bookstack.cn/projects/excelize-2.10-zh/1834ef16da2552371fe4f84a928edb26.png) | TableStyleLight17|  ![工具函数 - 图20](https://static.bookstack.cn/projects/excelize-2.10-zh/a5da2a08bdf572cfe9cdb83015f48d4d.png)   
TableStyleLight18|  ![工具函数 - 图21](https://static.bookstack.cn/projects/excelize-2.10-zh/5a0a5bc0ebecfa4defb6d727fac50025.png) | TableStyleLight19|  ![工具函数 - 图22](https://static.bookstack.cn/projects/excelize-2.10-zh/cec54e03828f652c4a5d4d54fc24ec69.png) | TableStyleLight20|  ![工具函数 - 图23](https://static.bookstack.cn/projects/excelize-2.10-zh/9f52921b828d9e8440bf668cfdb11246.png)   
TableStyleLight21|  ![工具函数 - 图24](https://static.bookstack.cn/projects/excelize-2.10-zh/b6e16fb147dff082a59de225f6f0a93d.png) | TableStyleMedium1|  ![工具函数 - 图25](https://static.bookstack.cn/projects/excelize-2.10-zh/41e1fb41c268cb4f402eccb954a47c65.png) | TableStyleMedium2|  ![工具函数 - 图26](https://static.bookstack.cn/projects/excelize-2.10-zh/7d84e7e890f4033627de6cb0b5f28260.png)   
TableStyleMedium3|  ![工具函数 - 图27](https://static.bookstack.cn/projects/excelize-2.10-zh/700e9709c40a0ba64e6c5cc12e3ffb57.png) | TableStyleMedium4|  ![工具函数 - 图28](https://static.bookstack.cn/projects/excelize-2.10-zh/ad261c8f311d112b47347f402ed7da82.png) | TableStyleMedium5|  ![工具函数 - 图29](https://static.bookstack.cn/projects/excelize-2.10-zh/0337a2764398193dd2d74e17fa4a033f.png)   
TableStyleMedium6|  ![工具函数 - 图30](https://static.bookstack.cn/projects/excelize-2.10-zh/2ba950437ba4e25e94d9758c7b55a0f0.png) | TableStyleMedium7|  ![工具函数 - 图31](https://static.bookstack.cn/projects/excelize-2.10-zh/5292b5e0cbe869aabc67b0d6b69d469c.png) | TableStyleMedium8|  ![工具函数 - 图32](https://static.bookstack.cn/projects/excelize-2.10-zh/18591cb104050bb7eb7843f5a286f5d3.png)   
TableStyleMedium9|  ![工具函数 - 图33](https://static.bookstack.cn/projects/excelize-2.10-zh/2d8b2e18a09069101e7bc17d7009ede7.png) | TableStyleMedium10|  ![工具函数 - 图34](https://static.bookstack.cn/projects/excelize-2.10-zh/52aa9f02ddf01c728b7ce43a9f958efc.png) | TableStyleMedium11|  ![工具函数 - 图35](https://static.bookstack.cn/projects/excelize-2.10-zh/dbfce6c7c9bafa1d09c88738e3f43420.png)   
TableStyleMedium12|  ![工具函数 - 图36](https://static.bookstack.cn/projects/excelize-2.10-zh/61d3578369deff4ff7a231f0f32ef597.png) | TableStyleMedium13|  ![工具函数 - 图37](https://static.bookstack.cn/projects/excelize-2.10-zh/f705018e485859c8f218f2a53b1a08a8.png) | TableStyleMedium14|  ![工具函数 - 图38](https://static.bookstack.cn/projects/excelize-2.10-zh/98feb38e1800ac79552cd71f2c49b538.png)   
TableStyleMedium15|  ![工具函数 - 图39](https://static.bookstack.cn/projects/excelize-2.10-zh/4e50432b362f56f5c5cf607a3b528ad4.png) | TableStyleMedium16|  ![工具函数 - 图40](https://static.bookstack.cn/projects/excelize-2.10-zh/78ce94a25abefea504d48884f7649728.png) | TableStyleMedium17|  ![工具函数 - 图41](https://static.bookstack.cn/projects/excelize-2.10-zh/8b6bb2eaacdc67f75ccc76d3c61089b8.png)   
TableStyleMedium18|  ![工具函数 - 图42](https://static.bookstack.cn/projects/excelize-2.10-zh/a921abdfca2743c24cb115ad8786132e.png) | TableStyleMedium19|  ![工具函数 - 图43](https://static.bookstack.cn/projects/excelize-2.10-zh/c28996e3d5b635627acf51b616b3f379.png) | TableStyleMedium20|  ![工具函数 - 图44](https://static.bookstack.cn/projects/excelize-2.10-zh/57774baf721cb98f49aa4a8dee01a631.png)   
TableStyleMedium21|  ![工具函数 - 图45](https://static.bookstack.cn/projects/excelize-2.10-zh/e5ab27ebabf853551765e4e3a410e5d3.png) | TableStyleMedium22|  ![工具函数 - 图46](https://static.bookstack.cn/projects/excelize-2.10-zh/0a5f47ef2d62b4319134c1703d36dd06.png) | TableStyleMedium23|  ![工具函数 - 图47](https://static.bookstack.cn/projects/excelize-2.10-zh/47aa9cd5ca28debae3e168479beb598a.png)   
TableStyleMedium24|  ![工具函数 - 图48](https://static.bookstack.cn/projects/excelize-2.10-zh/86cb37d4dc95cd7271676eb24e115b45.png) | TableStyleMedium25|  ![工具函数 - 图49](https://static.bookstack.cn/projects/excelize-2.10-zh/ddbe42b4ab50542ffe601a2c2911be09.png) | TableStyleMedium26|  ![工具函数 - 图50](https://static.bookstack.cn/projects/excelize-2.10-zh/bc9de63fd7ebdb126964b470bd25b905.png)   
TableStyleMedium27|  ![工具函数 - 图51](https://static.bookstack.cn/projects/excelize-2.10-zh/1dde72e9d482aecc5f071d6378d70383.png) | TableStyleMedium28|  ![工具函数 - 图52](https://static.bookstack.cn/projects/excelize-2.10-zh/acde09c31e456995f6cf16d314b439a0.png) | TableStyleDark1|  ![工具函数 - 图53](https://static.bookstack.cn/projects/excelize-2.10-zh/b554ea620cd534b08c78cdaf293b4cdb.png)   
TableStyleDark2|  ![工具函数 - 图54](https://static.bookstack.cn/projects/excelize-2.10-zh/ac93ae9d72972ca00685996c8573a25c.png) | TableStyleDark3|  ![工具函数 - 图55](https://static.bookstack.cn/projects/excelize-2.10-zh/bdea7c9c011ed0b9eacb8b44222da0d9.png) | TableStyleDark4|  ![工具函数 - 图56](https://static.bookstack.cn/projects/excelize-2.10-zh/cc17de3e56a30dbed9073c2cd6c9a1a8.png)   
TableStyleDark5|  ![工具函数 - 图57](https://static.bookstack.cn/projects/excelize-2.10-zh/1cb192edb0e7dbb09734f3f8aa755ca5.png) | TableStyleDark6|  ![工具函数 - 图58](https://static.bookstack.cn/projects/excelize-2.10-zh/ead1bbdbbe7e30957cb189d2577b241b.png) | TableStyleDark7|  ![工具函数 - 图59](https://static.bookstack.cn/projects/excelize-2.10-zh/e2c643b7a796a10d978567d68e65d81d.png)   
TableStyleDark8|  ![工具函数 - 图60](https://static.bookstack.cn/projects/excelize-2.10-zh/c991e54142866a849715298f6c447602.png) | TableStyleDark9|  ![工具函数 - 图61](https://static.bookstack.cn/projects/excelize-2.10-zh/653ead93b84fbb220401957c695d05b4.png) | TableStyleDark10|  ![工具函数 - 图62](https://static.bookstack.cn/projects/excelize-2.10-zh/d1dd5678f981e670253870db91a2fa7a.png)   
TableStyleDark11|  ![工具函数 - 图63](https://static.bookstack.cn/projects/excelize-2.10-zh/5c3a9417ea942722872d21e36631b08a.png) | | | |   

## 获取表格

func (f *File) GetTables(sheet string) ([]Table, error)


根据给定的工作表名称获取指定工作表中的全部表格。

## 删除表格

func (f *File) DeleteTable(name string) error


根据给定的表格名称删除表格。

## 自动过滤器

func (f *File) AutoFilter(sheet, rangeRef string, opts []AutoFilterOptions) error


根据给定的工作表名称、单元格坐标区域和条件格式创建自动过滤器。电子表格中的自动过滤器可以对一些简单的二维数据数据进行数据筛选。

例1,在名称为 `Sheet1` 的工作表 `A1:D4` 区域创建自动过滤器:

![创建自动过滤器](https://static.bookstack.cn/projects/excelize-2.10-zh/85c2b884ecac22825093bbbab2663a83.png) 

err := f.AutoFilter("Sheet1", "A1:D4", []excelize.AutoFilterOptions{})


例2,在名称为 `Sheet1` 的工作表 `A1:D4` 区域创建带有格式条件的自动过滤器:

err := f.AutoFilter("Sheet1", "A1:D4", []excelize.AutoFilterOptions{ {Column: "B", Expression: "x != blanks"}, })


参数 `Column` 指定了自动过滤器在过滤范围内的基准列。Excelize 暂不支持自动过滤器的计算,在设置过滤条件后,如果需要隐藏任何不符合过滤条件的行,可以使用 [SetRowVisible()](/read/excelize-2.10-zh/d004.md#SetRowVisible) 设置行的可见性。

为列设置过滤条件,参数 `Expression` 用于指定过滤条件运算,支持下列运算符:

== !=

<

<= and or


一个表达式可以包含一个或两个由 `and` 和 `or` 运算符分隔的语句。例如:

x < 2000 x > 2000 x == 2000 x > 2000 and x < 5000 x == 2000 or x == 5000


可以通过在表达式中使用空白或非空白值来实现空白或非空白数据的过滤:

x == Blanks x == NonBlanks


Office Excel 还允许一些简单的字符串匹配操作:

x == b // 以 b 开始 x != b // 不以 b 开始 x == b // 以 b 结尾 x != b // 不以 b 结尾 x == b // 包含 b x != b // 不包含 b


我们还可以使用 `*` 来匹配任何字符或数字,用 `?` 匹配任何单个字符或数字。除此之外,Office Excel 的自动过滤器不支持其他正则表达式的关键字。Excel 的正则表达式字符可以使用 `~` 进行转义。

上述示例中的占位符变量 `x` 可以被任何简单的字符串替换。实际的占位符名称在内部被忽略,所以以下所有表达式的效果都是等同的:

x < 2000 col < 2000 Price < 2000


## 清除单元格缓存

func (f *File) UpdateLinkedValue() error


Excel 会在保存时将保存带有公式的单元格的计算结果,这会导致在 Office Excel 2007 和 2010 中文档在打开时,即便计算因子已经发生变化,公式的计算结果不会自动更新。参考链接:&lt;https://learn.microsoft.com/en-us/archive/msdn-technet-forums/e16bae1f-6a2c-4325-8013-e989a3479066>。此函数会将工作簿中所有缓存结果清除,这样文档在 Office Excel 中被重新打开时会自动计算新的公式结果,但是由于计算后文档发生了变化,在关闭文档时 Office Excel 会提示是否保存工作簿。

清除单元格缓存对工作簿的影响表现为对 `<v>` 标签的修改,例如,清除前的单元格缓存:

SUM(Sheet2!D2,Sheet2!D11) 100


清除单元格缓存后:

SUM(Sheet2!D2,Sheet2!D11)


## 单元格坐标切分

func SplitCellName(cell string) (string, int, error)


将工作表的单元格坐标切分为列名和行号。例如,将单元格坐标 `AK74` 切分为 `AK` 和 `74`:

excelize.SplitCellName("AK74") // return "AK", 74, nil


## 单元格坐标组合

func JoinCellName(col string, row int) (string, error)


将列名和行号组合成工作表的单元格坐标。

## 列名转索引

func ColumnNameToNumber(name string) (int, error)


将工作表的列名(不区分大小写)转换为索引,对于错误的列名格式将返回错误。例如:

excelize.ColumnNameToNumber("AK") // returns 37, nil


## 索引转列名

func ColumnNumberToName(num int) (string, error)


将数据类型为整型的索引转换为列名。例如:

excelize.ColumnNumberToName(37) // returns "AK", nil


## 单元格坐标转索引

func CellNameToCoordinates(cell string) (int, int, error)


将由字母和数字组合而成的单元格坐标转换为 `[X, Y]` 形式的行、列索引,或返回错误。例如:

excelize.CellNameToCoordinates("A1") // returns 1, 1, nil excelize.CellNameToCoordinates("Z3") // returns 26, 3, nil


## 索引转单元格坐标

func CoordinatesToCellName(col, row int, abs ...bool) (string, error)


将 `[X, Y]` 形式的行、列索引转换为由字母和数字组合而成的单元格坐标,或返回错误。例如:

excelize.CoordinatesToCellName(1, 1) // returns "A1", nil excelize.CoordinatesToCellName(1, 1, true) // returns "$A$1", nil


## 创建条件格式样式

func (f File) NewConditionalStyle(style Style) (int, error)


通过给定样式为条件格式创建样式,样式参数与 [NewStyle](/read/excelize-2.10-zh/d067.md#NewStyle) 函数的相同。请注意,使用 RGB 色域颜色代码时,目前仅支持设置字体、填充、对齐和边框的颜色。

## 获取条件格式样式

func (f File) GetConditionalStyle(idx int) (Style, error)


根据给定的条件格式样式索引获取条件格式样式定义。

## 设置条件格式

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


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

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

类型| 参数  
---|---  
cell| 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()](/read/excelize-2.10-zh/d071.md#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  
3Stars  
3Symbols  
3Symbols2  
3TrafficLights1  
3TrafficLights2  
3Triangles  
4Arrows  
4ArrowsGray  
4Rating  
4RedToBlack  
4TrafficLights  
5Arrows  
5ArrowsGray  
5Boxes  
5Quarters  
5Rating  

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

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

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

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

![通过设置条件格式高亮区域单元格中的最大值与最小值](https://static.bookstack.cn/projects/excelize-2.10-zh/6bd44816770f6962708123654a90ed99.png) 

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 } }


## 获取条件格式

func (f *File) GetConditionalFormats(sheet string) (map[string][]ConditionalFormatOptions, error)


根据给定的工作表名称获取该工作表中全部单元格坐标区域和条件格式参数。

## 删除条件格式

func (f *File) UnsetConditionalFormat(sheet, rangeRef string) error


根据给定的工作表名称和单元格坐标区域删除条件格式。

## 设置窗格

func (f File) SetPanes(sheet string, panes Panes) error


通过给定的工作表名称和窗格样式参数设置冻结窗格或拆分窗格。

`ActivePane` 定义了活动窗格,下表为该属性的可选值:

枚举值| 描述  
---|---  
bottomLeft (Bottom Left Pane)| 当应用垂直和水平分割时,位于左下方的窗格。  

此值也适用于仅应用了水平分割的情况,将窗格分为上下两个区域。在这种情况下,该值指定底部窗格。  
bottomRight (Bottom Right Pane)| 当垂直和水平时,位于底部右侧的窗格。  
topLeft (Top Left Pane)| 当应用垂直和水平分割时,位于左上方的窗格。  

此值也适用于仅应用了水平分割的情况,将窗格分为上下两个区域。在这种情况下,该值指定顶部窗格。  

此值也适用于仅应用垂直分割的情况,将窗格分割为右侧和左侧区域。在这种情况下,该值指定左侧窗格。  
topRight (Top Right Pane)| 当应用垂直和水平分割时,位于右上方窗格。  

此值也适用于仅应用垂直分割的情况,将窗格分割为右侧和左侧区域。在这种情况下,该值指定右侧窗格。  

窗格状态类型仅限于下表中当前列出的受支持的值:

枚举值| 描述  
---|---  
frozen (Frozen)| 窗格被冻结,但并不分裂。在此状态下,当窗格被解除冻结然后再次解冻时,会生成单个窗格,而不会被分割。  

在这种状态下,分割条不可调节。  
split (Split)| 窗格被分裂,但并不冻结。在此状态下,用户可以调整分割条。  

`XSplit` \- 水平分割点的位置。如果窗格冻结,则此值用于设置顶部窗格中可见的列数。

`YSplit` \- 垂直分割点的位置。如果窗格冻结,则此值用于设置左侧窗格中可见的行数。该属性的可能值由 W3C XML Schema double 数据类型定义。

`TopLeftCell` \- 处于“从左到右”模式时,右下方窗格中左上角可见单元格的位置。

`SQRef` \- 参考单元格坐标区域。可以是非连续的一组单元格坐标区域。

例1,在名为 `Sheet1` 的工作表上冻结列 `A` 并设置活动单元格 `Sheet1!K16`:

![冻结列](https://static.bookstack.cn/projects/excelize-2.10-zh/f3d2e23f0045c60f2dc8ba04fd6b7bc9.png) 

err := f.SetPanes("Sheet1", &excelize.Panes{ Freeze: true, XSplit: 1, TopLeftCell: "B1", ActivePane: "topRight", Selection: []excelize.Selection{ {SQRef: "K16", ActiveCell: "K16", Pane: "topRight"}, }, })


例2,在名为 `Sheet1` 的工作表上冻结第 1 到第 9 行,并设置活动单元格区域 `Sheet1!A11:XFD11`:

![冻结列并设置活动单元格区域](https://static.bookstack.cn/projects/excelize-2.10-zh/04c3025e70a2c3729cb42f848ef2fad5.png) 

err := f.SetPanes("Sheet1", &excelize.Panes{ Freeze: true, YSplit: 9, TopLeftCell: "A34", ActivePane: "bottomLeft", Selection: []excelize.Selection{ {SQRef: "A11:XFD11", ActiveCell: "A11", Pane: "bottomLeft"}, }, })


例3,在名为 `Sheet1` 的工作表上创建拆分窗格,并设置活动单元格 `Sheet1!J60`:

![创建拆分窗格](https://static.bookstack.cn/projects/excelize-2.10-zh/8cd485f53ec2e3fbf9246a777473d02b.png) 

err := f.SetPanes("Sheet1", &excelize.Panes{ Split: true, XSplit: 3270, YSplit: 1800, TopLeftCell: "N57", ActivePane: "bottomLeft", Selection: []excelize.Selection{ {SQRef: "I36", ActiveCell: "I36"}, {SQRef: "G33", ActiveCell: "G33", Pane: "topRight"}, {SQRef: "J60", ActiveCell: "J60", Pane: "bottomLeft"}, {SQRef: "O60", ActiveCell: "O60", Pane: "bottomRight"}, }, })


例4,解冻并删除名为 `Sheet1` 上的所有窗格:

err := f.SetPanes("Sheet1", &excelize.Panes{Freeze: false, Split: false})


## 获取窗格

func (f *File) GetPanes(sheet string) (Panes, error)


通过给定的工作表名称获取带有冻结窗格或拆分窗格的窗格格式。

## 色值计算

func (f File) GetBaseColor(hexColor string, indexedColor int, themeColor int) string


通过给定的十六进制颜色代码、索引颜色和主题颜色返回首选的十六进制颜色代码。

func ThemeColor(baseColor string, tint float64) string


通过给定的十六进制颜色代码与色调参数,计算出最终颜色。

电子表格文档中的文本有 3 种颜色:十六进制颜色、索引颜色和主题颜色。这些颜色的优先级为:十六进制颜色优先于主题颜色、主题颜色优先于索引颜色。另外,颜色还支持基于十六进制颜色应用色调值,因此可使用 ThemeColor 函数为首选颜色应用色调,以获得计算出的实际十六进制颜色值。例如,获取名为 `Sheet1` 的工作表 `A1` 单元格的富文本中的文字颜色:

package main

import ( "fmt"

"github.com/xuri/excelize/v2"

)

func main() { f, err := excelize.OpenFile("Book1.xlsx") if err != nil { fmt.Println(err) return } defer func() { if err := f.Close(); err != nil { fmt.Println(err) } }() runs, err := f.GetCellRichText("Sheet1", "A1") if err != nil { fmt.Println(err) return } for _, run := range runs { var hexColor string if run.Font != nil { baseColor := f.GetBaseColor(run.Font.Color, run.Font.ColorIndexed, run.Font.ColorTheme) hexColor = strings.TrimPrefix(excelize.ThemeColor(baseColor, run.Font.ColorTint), "FF") } fmt.Printf("text: %s, color: %s\r\n", run.Text, hexColor) } }


## RGB与HSL色彩空间色值转换

func RGBToHSL(r, g, b uint8) (h, s, l float64)


该函数提供方法将 RGB 色彩空间三元组转换为 HSL 色彩空间三元组。

## HSL与RGB色彩空间色值转换

func HSLToRGB(h, s, l float64) (r, g, b uint8)


该函数提供方法将 HSL 色彩空间三元组转换为 RGB 色彩空间三元组。

## 文件 Writer

### Write

func (f *File) Write(w io.Writer, opts ...Options) error


该函数提供方法将当前文件内容写入给定的 `io.Writer`。

### WriteTo

func (f *File) WriteTo(w io.Writer, opts ...Options) (int64, error)


该函数通过实现 `io.WriterTo` 以保存文件。

### WriteToBuffer

func (f File) WriteToBuffer() (bytes.Buffer, error)


该函数提供获取当前文件内容 `*bytes.Buffer` 的方法。

## 嵌入 VBA 项目

func (f *File) AddVBAProject(file []byte) error


该函数提供方法将包含函数和/或宏的 `vbaProject.bin` 文件嵌入到 Excel 文档中,文件扩展名应为 `.xlsm` 或者 `.xltm`。例如:

codeName := "Sheet1" if err := f.SetSheetProps("Sheet1", &excelize.SheetPropsOptions{ CodeName: &codeName, }); err != nil { fmt.Println(err) return } file, err := os.ReadFile("vbaProject.bin") if err != nil { fmt.Println(err) return } if err := f.AddVBAProject(file); err != nil { fmt.Println(err) return } if err := f.SaveAs("macros.xlsm"); err != nil { fmt.Println(err) return }


## Excel 日期时间转换

func ExcelDateToTime(excelDate float64, use1904Format bool) (time.Time, error)


ExcelDateToTime 将 Excel 中以 `float` 类型表示的日期转换为 `time.Time` 类型。

## 字符集转码器

func (f File) CharsetTranscoder(fn func(charset string, input io.Reader) (rdr io.Reader, err error)) File


CharsetTranscoder 为非 UTF-8 编码的电子表格文档设置用户提供指定自定义编码转换器支持。

## 设置 ZIP 写入器

func (f File) SetZipWriter(fn func(io.Writer) ZipWriter) File ```

SetZipWriter 设置用于保存工作簿的用户自定义 ZIP 写入函数。