单元格

RichTextRun 定义了富文本的属性。

  1. type RichTextRun struct {
  2. Font *Font
  3. Text string
  4. }

HyperlinkOpts 用来指定可选的超链接属性,例如要显示的文字与屏幕提示文字。

  1. type HyperlinkOpts struct {
  2. Display *string
  3. Tooltip *string
  4. }

FormulaOpts 用于在 SetCellFormula 函数中指定设置特殊公式类型。

  1. type FormulaOpts struct {
  2. Type *string // 公式类型
  3. Ref *string // 共享公式引用
  4. }

设置单元格的值

  1. func (f *File) SetCellValue(sheet, axis string, value interface{}) error

根据给定的工作表名和单元格坐标设置单元格的值。指定的坐标不应在表格的第一行范围,使用字符文本设置复数。

支持的数据类型
int
int8
int16
int32
int64
uint
uint8
uint16
uint32
uint64
float32
float64
string
[]byte
time.Duration
time.Time
bool
nil

设置布尔型值

  1. func (f *File) SetCellBool(sheet, axis string, value bool) error

根据给定的工作表名和单元格坐标设置布尔型单元格的值。

设置默认字符型值

  1. func (f *File) SetCellDefault(sheet, axis, value string) error

根据给定的工作表名和单元格坐标设置字符型单元格的值,字符将不会进行特殊字符过滤。

设置实数

  1. func (f *File) SetCellInt(sheet, axis string, value int) error

根据给定的工作表名和单元格坐标设置实数单元格的值。

设置字符型值

  1. func (f *File) SetCellStr(sheet, axis, value string) error

根据给定的工作表名和单元格坐标设置字符型单元格的值,字符将会进行特殊字符过滤,并且字符串的累计长度应不超过 32767,多余的字符将会被忽略。

设置单元格样式

  1. func (f *File) SetCellStyle(sheet, hcell, vcell string, styleID int) error

根据给定的工作表名、单元格坐标区域和样式索引设置单元格的值。样式索引可以通过 NewStyle 函数获取。注意,在同一个坐标区域内的 diagonalDowndiagonalUp 需要保持颜色一致。

  • 例1,为名为 Sheet1 的工作表 D7 单元格设置边框样式:
  1. style, err := f.NewStyle(`{
  2. "border": [
  3. {
  4. "type": "left",
  5. "color": "0000FF",
  6. "style": 3
  7. },
  8. {
  9. "type": "top",
  10. "color": "00FF00",
  11. "style": 4
  12. },
  13. {
  14. "type": "bottom",
  15. "color": "FFFF00",
  16. "style": 5
  17. },
  18. {
  19. "type": "right",
  20. "color": "FF0000",
  21. "style": 6
  22. },
  23. {
  24. "type": "diagonalDown",
  25. "color": "A020F0",
  26. "style": 7
  27. },
  28. {
  29. "type": "diagonalUp",
  30. "color": "A020F0",
  31. "style": 8
  32. }]
  33. }`)
  34. if err != nil {
  35. fmt.Println(err)
  36. }
  37. err = f.SetCellStyle("Sheet1", "D7", "D7", style)

为单元格设置边框样式

单元格 D7 的四个边框被设置了不同的样式和颜色,这与调用 NewStyle 函数时的参数有关,需要设置不同的样式可参考该章节的文档。

  • 例2,为名为 Sheet1 的工作表 D7 单元格设置渐变样式:
  1. style, err := f.NewStyle(`{"fill":{"type":"gradient","color":["#FFFFFF","#E0EBF5"],"shading":1}}`)
  2. if err != nil {
  3. fmt.Println(err)
  4. }
  5. err = f.SetCellStyle("Sheet1", "D7", "D7", style)

为单元格设置渐变样式

单元格 D7 被设置了渐变效果的颜色填充,渐变填充效果与调用 NewStyle 函数时的参数有关,需要设置不同的样式可参考该章节的文档。

  • 例3,为名为 Sheet1 的工作表 D7 单元格设置纯色填充:
  1. style, err := f.NewStyle(`{"fill":{"type":"pattern","color":["#E0EBF5"],"pattern":1}}`)
  2. if err != nil {
  3. fmt.Println(err)
  4. }
  5. err = f.SetCellStyle("Sheet1", "D7", "D7", style)

为单元格设置纯色填充

单元格 D7 被设置了纯色填充。

  • 例4,为名为 Sheet1 的工作表 D7 单元格设置字符间距与旋转角度:
  1. f.SetCellValue("Sheet1", "D7", "样式")
  2. style, err := f.NewStyle(`{
  3. "alignment":
  4. {
  5. "horizontal": "center",
  6. "ident": 1,
  7. "justify_last_line": true,
  8. "reading_order": 0,
  9. "relative_indent": 1,
  10. "shrink_to_fit": true,
  11. "text_rotation": 45,
  12. "vertical": "",
  13. "wrap_text": true
  14. }
  15. }`)
  16. if err != nil {
  17. fmt.Println(err)
  18. }
  19. err = f.SetCellStyle("Sheet1", "D7", "D7", style)

设置字符间距与旋转角度

  • 例5,Excel 中的日期和时间用实数表示,例如 2017/7/4 12:00:00 PM 可以用数字 42920.5 来表示。为名为 Sheet1 的工作表 D7 单元格设置时间格式:
  1. f.SetCellValue("Sheet1", "D7", 42920.5)
  2. f.SetColWidth("Sheet1", "D", "D", 13)
  3. style, err := f.NewStyle(`{"number_format": 22}`)
  4. if err != nil {
  5. fmt.Println(err)
  6. }
  7. err = f.SetCellStyle("Sheet1", "D7", "D7", style)

为单元格设置时间格式

单元格 D7 被设置了时间格式。注意,当应用了时间格式的单元格宽度过窄无法完整展示时会显示为 ####,可以拖拽调整列宽或者通过调用 SetColWidth 函数设置列宽到合适的大小使其正常显示。

  • 例6,为名为 Sheet1 的工作表 D7 单元格设置字体、字号、颜色和倾斜样式:
  1. f.SetCellValue("Sheet1", "D7", "Excel")
  2. style, err := f.NewStyle(`{
  3. "font":
  4. {
  5. "bold": true,
  6. "italic": true,
  7. "family": "Times New Roman",
  8. "size": 36,
  9. "color": "#777777"
  10. }
  11. }`)
  12. if err != nil {
  13. fmt.Println(err)
  14. }
  15. err = f.SetCellStyle("Sheet1", "D7", "D7", style)

为单元格设置字体、字号、颜色和倾斜样式

  • 例7,锁定并隐藏名为 Sheet1 的工作表 D7 单元格:
  1. style, err := f.NewStyle(`{"protection":{"hidden":true, "locked":true}}`)
  2. if err != nil {
  3. fmt.Println(err)
  4. }
  5. err = f.SetCellStyle("Sheet1", "D7", "D7", style)

要锁定单元格或隐藏公式,请保护工作表。在“审阅”选项卡上,单击“保护工作表”。

设置超链接

  1. func (f *File) SetCellHyperLink(sheet, axis, link, linkType string) error

根据给定的工作表、单元格坐标、链接资源和资源类型设置单元格的超链接。资源类型分为外部链接地址 External 和工作簿内部位置链接 Location 两种。每个工作表中的包含最大超链接限制为 65530 个。

  • 例1,为名为 Sheet1 的工作表 A3 单元格添加外部链接:
  1. err := f.SetCellHyperLink("Sheet1", "A3",
  2. "https://github.com/360EntSecGroup-Skylar/excelize", "External")
  3. // 为单元格设置字体和下划线样式
  4. style, err := f.NewStyle(`{"font":{"color":"#1265BE","underline":"single"}}`)
  5. err = f.SetCellStyle("Sheet1", "A3", "A3", style)
  • 例2,为名为 Sheet1 的工作表 A3 单元格添加内部位置链接:
  1. err := f.SetCellHyperLink("Sheet1", "A3", "Sheet1!A40", "Location")

设置富文本格式

  1. func (f *File) SetCellRichText(sheet, cell string, runs []RichTextRun) error

根据给定的工作表、单元格坐标和富文本格式为指定单元格设置富文本。

例如,在名为 Sheet1 的工作表 A1 单元格设置富文本格式:

设置富文本格式

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/360EntSecGroup-Skylar/excelize/v2"
  5. )
  6. func main() {
  7. f := excelize.NewFile()
  8. if err := f.SetRowHeight("Sheet1", 1, 35); err != nil {
  9. fmt.Println(err)
  10. return
  11. }
  12. if err := f.SetColWidth("Sheet1", "A", "A", 44); err != nil {
  13. fmt.Println(err)
  14. return
  15. }
  16. if err := f.SetCellRichText("Sheet1", "A1", []excelize.RichTextRun{
  17. {
  18. Text: "bold",
  19. Font: &excelize.Font{
  20. Bold: true,
  21. Color: "2354e8",
  22. Family: "Times New Roman",
  23. },
  24. },
  25. {
  26. Text: " and ",
  27. Font: &excelize.Font{
  28. Family: "Times New Roman",
  29. },
  30. },
  31. {
  32. Text: "italic",
  33. Font: &excelize.Font{
  34. Bold: true,
  35. Color: "e83723",
  36. Italic: true,
  37. Family: "Times New Roman",
  38. },
  39. },
  40. {
  41. Text: "text with color and font-family,",
  42. Font: &excelize.Font{
  43. Bold: true,
  44. Color: "2354e8",
  45. Family: "Times New Roman",
  46. },
  47. },
  48. {
  49. Text: "\r\nlarge text with ",
  50. Font: &excelize.Font{
  51. Size: 14,
  52. Color: "ad23e8",
  53. },
  54. },
  55. {
  56. Text: "strike",
  57. Font: &excelize.Font{
  58. Color: "e89923",
  59. Strike: true,
  60. },
  61. },
  62. {
  63. Text: " and ",
  64. Font: &excelize.Font{
  65. Size: 14,
  66. Color: "ad23e8",
  67. },
  68. },
  69. {
  70. Text: "underline.",
  71. Font: &excelize.Font{
  72. Color: "23e833",
  73. Underline: "single",
  74. },
  75. },
  76. }); err != nil {
  77. fmt.Println(err)
  78. return
  79. }
  80. style, err := f.NewStyle(&excelize.Style{
  81. Alignment: &excelize.Alignment{
  82. WrapText: true,
  83. },
  84. })
  85. if err != nil {
  86. fmt.Println(err)
  87. return
  88. }
  89. if err := f.SetCellStyle("Sheet1", "A1", "A1", style); err != nil {
  90. fmt.Println(err)
  91. return
  92. }
  93. if err := f.SaveAs("Book1.xlsx"); err != nil {
  94. fmt.Println(err)
  95. }
  96. }

获取富文本格式

  1. func (f *File) GetCellRichText(sheet, cell string) (runs []RichTextRun, err error)

根据给定的工作表、单元格坐标获取指定单元格的富文本格式。

获取单元格的值

  1. func (f *File) GetCellValue(sheet, axis string) (string, error)

根据给定的工作表和单元格坐标获取单元格的值,返回值将转换为 string 类型。如果可以将单元格格式应用于单元格的值,将返回应用后的值,否则将返回原始值。

按列获取全部单元格的值

  1. func (f *File) GetCols(sheet string) ([][]string, error)

根据给定的工作表名(大小写敏感)按列获取该工作表上全部单元格的值,以二维数组形式返回,其中单元格的值将转换为 string 类型。如果可以将单元格格式应用于单元格的值,将使用应用后的值,否则将使用原始值。

例如,按列获取并遍历输出名为 Sheet1 的工作表上的所有单元格的值:

  1. cols, err := f.GetCols("Sheet1")
  2. if err != nil {
  3. fmt.Println(err)
  4. return
  5. }
  6. for _, col := range cols {
  7. for _, rowCell := range col {
  8. fmt.Print(rowCell, "\t")
  9. }
  10. fmt.Println()
  11. }

按行获取全部单元格的值

  1. func (f *File) GetRows(sheet string) ([][]string, error)

根据给定的工作表名(大小写敏感)按行获取该工作表上全部单元格的值,以二维数组形式返回,其中单元格的值将转换为 string 类型。如果可以将单元格格式应用于单元格的值,将使用应用后的值,否则将使用原始值。

例如,按行获取并遍历输出名为 Sheet1 的工作表上的所有单元格的值:

  1. rows, err := f.GetRows("Sheet1")
  2. if err != nil {
  3. fmt.Println(err)
  4. return
  5. }
  6. for _, row := range rows {
  7. for _, colCell := range row {
  8. fmt.Print(colCell, "\t")
  9. }
  10. fmt.Println()
  11. }

获取超链接

  1. func (f *File) GetCellHyperLink(sheet, axis string) (bool, string, error)

根据给定的工作表名(大小写敏感)和单元格坐标获取单元格超链接,如果该单元格存在超链接,将返回 true 和链接地址,否则将返回 false 和空的链接地址。

例如,获取名为 Sheet1 的工作表上坐标为 H6 单元格的超链接:

  1. link, target, err := f.GetCellHyperLink("Sheet1", "H6")

获取样式索引

  1. func (f *File) GetCellStyle(sheet, axis string) (int, error)

根据给定的工作表名(大小写敏感)和单元格坐标获取单元格样式索引,获取到的索引可以在复制单元格样式时,作为调用 SetCellValue 函数的参数使用。

合并单元格

  1. func (f *File) MergeCell(sheet, hcell, vcell string) error

根据给定的工作表名(大小写敏感)和单元格坐标区域合并单元格。例如,合并名为 Sheet1 的工作表上 D3:E9 区域内的单元格:

  1. err := f.MergeCell("Sheet1", "D3", "E9")

如果给定的单元格坐标区域与已有的其他合并单元格相重叠,已有的合并单元格将会被删除。

取消合并单元格

  1. func (f *File) UnmergeCell(sheet string, hcell, vcell string) error

根据给定的工作表名(大小写敏感)和单元格坐标区域取消合并单元格。例如,取消合并名为 Sheet1 的工作表上 D3:E9 区域内的单元格:

  1. err := f.UnmergeCell("Sheet1", "D3", "E9")

如果给定的单元格坐标区域包含多个合并单元格,则全部合并单元格都将被取消合并。

获取合并单元格

根据给定的工作表名(大小写敏感)获取全部合并单元格的坐标区域和值。

  1. func (f *File) GetMergeCells(sheet string) ([]MergeCell, error)

添加批注

  1. func (f *File) AddComment(sheet, cell, format string) error

根据给定的工作表名称、单元格坐标和样式参数(作者与文本信息)添加批注。作者信息最大长度为 255 个字符,最大文本内容长度为 32512 个字符,超出该范围的字符将会被忽略。例如,为 Sheet1!$A$3 单元格添加批注:

在 Excel 文档中添加批注

  1. err := f.AddComment("Sheet1", "A3", `{"author":"Excelize: ","text":"This is a comment."}`)

获取批注

  1. func (f *File) GetComments() (comments map[string][]Comment)

通过该方法可以获取全部工作表中的批注。

设置公式

  1. func (f *File) SetCellFormula(sheet, axis, formula string, opts ...FormulaOpts) error

根据给定的工作表名(大小写敏感)和单元格坐标设置取该单元格上的公式。公式的结果可在工作表被 Office Excel 应用程序打开时计算,或通过 CalcCellValue 函数计算单元格的值。

获取公式

  1. func (f *File) GetCellFormula(sheet, axis string) (string, error)

根据给定的工作表名(大小写敏感)和单元格坐标获取该单元格上的公式。

计算单元格的值

  1. func (f *File) CalcCellValue(sheet, cell string) (result string, err error)

根据给定的工作表名(大小写敏感)和单元格坐标计算包含公式单元格的值。该方法目前正在开发中,尚未支持数组函数、表格函数和其他部分函数。

支持的函数列表如下:

  1. ABS
  2. ACOS
  3. ACOSH
  4. ACOT
  5. ACOTH
  6. AND
  7. ARABIC
  8. ASIN
  9. ASINH
  10. ATAN
  11. ATAN2
  12. ATANH
  13. AVERAGE
  14. AVERAGEA
  15. BASE
  16. BESSELI
  17. BESSELJ
  18. BIN2DEC
  19. BIN2HEX
  20. BIN2OCT
  21. BITAND
  22. BITLSHIFT
  23. BITOR
  24. BITRSHIFT
  25. BITXOR
  26. CEILING
  27. CEILING.MATH
  28. CEILING.PRECISE
  29. CHAR
  30. CHOOSE
  31. CLEAN
  32. CODE
  33. COLUMN
  34. COLUMNS
  35. COMBIN
  36. COMBINA
  37. COMPLEX
  38. CONCAT
  39. CONCATENATE
  40. COS
  41. COSH
  42. COT
  43. COTH
  44. COUNT
  45. COUNTA
  46. COUNTBLANK
  47. CSC
  48. CSCH
  49. CUMIPMT
  50. CUMPRINC
  51. DATE
  52. DATEDIF
  53. DB
  54. DDB
  55. DEC2BIN
  56. DEC2HEX
  57. DEC2OCT
  58. DECIMAL
  59. DEGREES
  60. DOLLARDE
  61. DOLLARFR
  62. EFFECT
  63. ENCODEURL
  64. EVEN
  65. EXACT
  66. EXP
  67. FACT
  68. FACTDOUBLE
  69. FALSE
  70. FIND
  71. FINDB
  72. FISHER
  73. FISHERINV
  74. FIXED
  75. FLOOR
  76. FLOOR.MATH
  77. FLOOR.PRECISE
  78. FV
  79. FVSCHEDULE
  80. GAMMA
  81. GAMMALN
  82. GCD
  83. HARMEAN
  84. HEX2BIN
  85. HEX2DEC
  86. HEX2OCT
  87. HLOOKUP
  88. IF
  89. IFERROR
  90. IMABS
  91. IMAGINARY
  92. IMARGUMENT
  93. IMCONJUGATE
  94. IMCOS
  95. IMCOSH
  96. IMCOT
  97. IMCSC
  98. IMCSCH
  99. IMDIV
  100. IMEXP
  101. IMLN
  102. IMLOG10
  103. IMLOG2
  104. IMPOWER
  105. IMPRODUCT
  106. IMREAL
  107. IMSEC
  108. IMSECH
  109. IMSIN
  110. IMSINH
  111. IMSQRT
  112. IMSUB
  113. IMSUM
  114. IMTAN
  115. INT
  116. IPMT
  117. IRR
  118. ISBLANK
  119. ISERR
  120. ISERROR
  121. ISEVEN
  122. ISNA
  123. ISNONTEXT
  124. ISNUMBER
  125. ISODD
  126. ISTEXT
  127. ISO.CEILING
  128. ISPMT
  129. KURT
  130. LARGE
  131. LCM
  132. LEFT
  133. LEFTB
  134. LEN
  135. LENB
  136. LN
  137. LOG
  138. LOG10
  139. LOOKUP
  140. LOWER
  141. MAX
  142. MDETERM
  143. MEDIAN
  144. MID
  145. MIDB
  146. MIN
  147. MINA
  148. MIRR
  149. MOD
  150. MROUND
  151. MULTINOMIAL
  152. MUNIT
  153. N
  154. NA
  155. NOMINAL
  156. NORM.DIST
  157. NORMDIST
  158. NORM.INV
  159. NORMINV
  160. NORM.S.DIST
  161. NORMSDIST
  162. NORM.S.INV
  163. NORMSINV
  164. NOT
  165. NOW
  166. NPER
  167. NPV
  168. OCT2BIN
  169. OCT2DEC
  170. OCT2HEX
  171. ODD
  172. OR
  173. PDURATION
  174. PERCENTILE.INC
  175. PERCENTILE
  176. PERMUT
  177. PERMUTATIONA
  178. PI
  179. PMT
  180. POISSON.DIST
  181. POISSON
  182. POWER
  183. PPMT
  184. PRODUCT
  185. PROPER
  186. QUARTILE
  187. QUARTILE.INC
  188. QUOTIENT
  189. RADIANS
  190. RAND
  191. RANDBETWEEN
  192. REPLACE
  193. REPLACEB
  194. REPT
  195. RIGHT
  196. RIGHTB
  197. ROMAN
  198. ROUND
  199. ROUNDDOWN
  200. ROUNDUP
  201. ROW
  202. ROWS
  203. SEC
  204. SECH
  205. SHEET
  206. SIGN
  207. SIN
  208. SINH
  209. SKEW
  210. SMALL
  211. SQRT
  212. SQRTPI
  213. STDEV
  214. STDEV.S
  215. STDEVA
  216. SUBSTITUTE
  217. SUM
  218. SUMIF
  219. SUMSQ
  220. T
  221. TAN
  222. TANH
  223. TODAY
  224. TRIM
  225. TRUE
  226. TRUNC
  227. UNICHAR
  228. UNICODE
  229. UPPER
  230. VAR.P
  231. VARP
  232. VLOOKUP