You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

README_zh.md 6.5KB

3 months ago
7 months ago
10 months ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <p align="center"><img width="650" src="./excelize.svg" alt="Excelize logo"></p>
  2. <p align="center">
  3. <a href="https://travis-ci.org/360EntSecGroup-Skylar/excelize"><img src="https://travis-ci.org/360EntSecGroup-Skylar/excelize.svg?branch=master" alt="Build Status"></a>
  4. <a href="https://codecov.io/gh/360EntSecGroup-Skylar/excelize"><img src="https://codecov.io/gh/360EntSecGroup-Skylar/excelize/branch/master/graph/badge.svg" alt="Code Coverage"></a>
  5. <a href="https://goreportcard.com/report/github.com/360EntSecGroup-Skylar/excelize"><img src="https://goreportcard.com/badge/github.com/360EntSecGroup-Skylar/excelize" alt="Go Report Card"></a>
  6. <a href="https://godoc.org/github.com/360EntSecGroup-Skylar/excelize"><img src="https://godoc.org/github.com/360EntSecGroup-Skylar/excelize?status.svg" alt="GoDoc"></a>
  7. <a href="https://opensource.org/licenses/BSD-3-Clause"><img src="https://img.shields.io/badge/license-bsd-orange.svg" alt="Licenses"></a>
  8. <a href="https://www.paypal.me/xuri"><img src="https://img.shields.io/badge/Donate-PayPal-green.svg" alt="Donate"></a>
  9. </p>
  10. # Excelize
  11. ## 简介
  12. Excelize 是 Go 语言编写的用于操作 Office Excel 文档类库,基于 ECMA-376 Office OpenXML 标准。可以使用它来读取、写入由 Microsoft Excel&trade; 2007 及以上版本创建的 XLSX 文档。相比较其他的开源类库,Excelize 支持写入原本带有图片(表)、透视表和切片器等复杂样式的文档,还支持向 Excel 文档中插入图片与图表,并且在保存后不会丢失文档原有样式,可以应用于各类报表系统中。使用本类库要求使用的 Go 语言为 1.10 或更高版本,完整的 API 使用文档请访问 [godoc.org](https://godoc.org/github.com/360EntSecGroup-Skylar/excelize) 或查看 [参考文档](https://xuri.me/excelize/)。
  13. ## 快速上手
  14. ### 安装
  15. ```bash
  16. go get github.com/360EntSecGroup-Skylar/excelize
  17. ```
  18. ### 创建 Excel 文档
  19. 下面是一个创建 Excel 文档的简单例子:
  20. ```go
  21. package main
  22. import (
  23. "fmt"
  24. "github.com/360EntSecGroup-Skylar/excelize"
  25. )
  26. func main() {
  27. f := excelize.NewFile()
  28. // 创建一个工作表
  29. index := f.NewSheet("Sheet2")
  30. // 设置单元格的值
  31. f.SetCellValue("Sheet2", "A2", "Hello world.")
  32. f.SetCellValue("Sheet1", "B2", 100)
  33. // 设置工作簿的默认工作表
  34. f.SetActiveSheet(index)
  35. // 根据指定路径保存文件
  36. err := f.SaveAs("./Book1.xlsx")
  37. if err != nil {
  38. fmt.Println(err)
  39. }
  40. }
  41. ```
  42. ### 读取 Excel 文档
  43. 下面是读取 Excel 文档的例子:
  44. ```go
  45. package main
  46. import (
  47. "fmt"
  48. "github.com/360EntSecGroup-Skylar/excelize"
  49. )
  50. func main() {
  51. f, err := excelize.OpenFile("./Book1.xlsx")
  52. if err != nil {
  53. fmt.Println(err)
  54. return
  55. }
  56. // 获取工作表中指定单元格的值
  57. cell, err := f.GetCellValue("Sheet1", "B2")
  58. if err != nil {
  59. fmt.Println(err)
  60. return
  61. }
  62. fmt.Println(cell)
  63. // 获取 Sheet1 上所有单元格
  64. rows, err := f.GetRows("Sheet1")
  65. for _, row := range rows {
  66. for _, colCell := range row {
  67. fmt.Print(colCell, "\t")
  68. }
  69. fmt.Println()
  70. }
  71. }
  72. ```
  73. ### 在 Excel 文档中创建图表
  74. 使用 Excelize 生成图表十分简单,仅需几行代码。您可以根据工作表中的已有数据构建图表,或向工作表中添加数据并创建图表。
  75. <p align="center"><img width="650" src="./test/images/chart.png" alt="Excelize"></p>
  76. ```go
  77. package main
  78. import (
  79. "fmt"
  80. "github.com/360EntSecGroup-Skylar/excelize"
  81. )
  82. func main() {
  83. categories := map[string]string{"A2": "Small", "A3": "Normal", "A4": "Large", "B1": "Apple", "C1": "Orange", "D1": "Pear"}
  84. values := map[string]int{"B2": 2, "C2": 3, "D2": 3, "B3": 5, "C3": 2, "D3": 4, "B4": 6, "C4": 7, "D4": 8}
  85. f := excelize.NewFile()
  86. for k, v := range categories {
  87. f.SetCellValue("Sheet1", k, v)
  88. }
  89. for k, v := range values {
  90. f.SetCellValue("Sheet1", k, v)
  91. }
  92. err := f.AddChart("Sheet1", "E1", `{"type":"col3DClustered","series":[{"name":"Sheet1!$A$2","categories":"Sheet1!$B$1:$D$1","values":"Sheet1!$B$2:$D$2"},{"name":"Sheet1!$A$3","categories":"Sheet1!$B$1:$D$1","values":"Sheet1!$B$3:$D$3"},{"name":"Sheet1!$A$4","categories":"Sheet1!$B$1:$D$1","values":"Sheet1!$B$4:$D$4"}],"title":{"name":"Fruit 3D Clustered Column Chart"}}`)
  93. if err != nil {
  94. fmt.Println(err)
  95. return
  96. }
  97. // 根据指定路径保存文件
  98. err = f.SaveAs("./Book1.xlsx")
  99. if err != nil {
  100. fmt.Println(err)
  101. }
  102. }
  103. ```
  104. ### 向 Excel 文档中插入图片
  105. ```go
  106. package main
  107. import (
  108. "fmt"
  109. _ "image/gif"
  110. _ "image/jpeg"
  111. _ "image/png"
  112. "github.com/360EntSecGroup-Skylar/excelize"
  113. )
  114. func main() {
  115. f, err := excelize.OpenFile("./Book1.xlsx")
  116. if err != nil {
  117. fmt.Println(err)
  118. return
  119. }
  120. // 插入图片
  121. err = f.AddPicture("Sheet1", "A2", "./image1.png", "")
  122. if err != nil {
  123. fmt.Println(err)
  124. }
  125. // 在工作表中插入图片,并设置图片的缩放比例
  126. err = f.AddPicture("Sheet1", "D2", "./image2.jpg", `{"x_scale": 0.5, "y_scale": 0.5}`)
  127. if err != nil {
  128. fmt.Println(err)
  129. }
  130. // 在工作表中插入图片,并设置图片的打印属性
  131. err = f.AddPicture("Sheet1", "H2", "./image3.gif", `{"x_offset": 15, "y_offset": 10, "print_obj": true, "lock_aspect_ratio": false, "locked": false}`)
  132. if err != nil {
  133. fmt.Println(err)
  134. }
  135. // 保存文件
  136. err = f.Save()
  137. if err != nil {
  138. fmt.Println(err)
  139. }
  140. }
  141. ```
  142. ## 社区合作
  143. 欢迎您为此项目贡献代码,提出建议或问题、修复 Bug 以及参与讨论对新功能的想法。 XML 符合标准: [part 1 of the 5th edition of the ECMA-376 Standard for Office Open XML](http://www.ecma-international.org/publications/standards/Ecma-376.htm)。
  144. ## 开源许可
  145. 本项目遵循 BSD 3-Clause 开源许可协议,访问 [https://opensource.org/licenses/BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) 查看许可协议文件。
  146. Excel 徽标是 [Microsoft Corporation](https://aka.ms/trademarks-usage) 的商标,项目的图片是一种改编。
  147. 本类库中部分 XML 结构体的定义参考了开源项目:[tealeg/xlsx](https://github.com/tealeg/xlsx),遵循 [BSD 3-Clause License](https://github.com/tealeg/xlsx/blob/master/LICENSE) 开源许可协议。
  148. gopher.{ai,svg,png} 由 [Takuya Ueda](https://twitter.com/tenntenn) 创作,遵循 [Creative Commons 3.0 Attributions license](http://creativecommons.org/licenses/by/3.0/) 创作共用授权条款。