Chinaunix首页 | 论坛 | 博客
  • 博客访问: 17915
  • 博文数量: 5
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 59
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-26 21:22
文章分类

全部博文(5)

文章存档

2024年(1)

2023年(2)

2018年(1)

2017年(1)

我的朋友

分类: Web开发

2017-07-14 10:34:44













 是 Golang 编写的一个用来操作 Office Excel 文档类库,基于 ECMA-376 Office OpenXML 标准。可以使用它来读取、写入 XLSX 文件。相比较其他的开源类库,Excelize 支持写入原本带有图片(表)的文档,还支持向 Excel 中插入图片,并且在保存后不会丢失图表样式。

项目主页 安装

  1. go get github.com/xuri/excelize/v2

创建 XLSX


  1. package main

  2. import (
  3.     "fmt"

  4.     "github.com/xuri/excelize/v2"
  5. )

  6. func main() {
  7.     f := excelize.NewFile()
  8.     defer func() {
  9.         if err := f.Close(); err != nil {
  10.             fmt.Println(err)
  11.         }
  12.     }()
  13.     // 创建一个工作表
  14.     index, err := f.NewSheet("Sheet2")
  15.     if err != nil {
  16.         fmt.Println(err)
  17.         return
  18.     }
  19.     // 设置单元格的值
  20.     f.SetCellValue("Sheet2", "A2", "Hello world.")
  21.     f.SetCellValue("Sheet1", "B2", 100)
  22.     // 设置工作簿的默认工作表
  23.     f.SetActiveSheet(index)
  24.     // 根据指定路径保存文件
  25.     if err := f.SaveAs("Book1.xlsx"); err != nil {
  26.         fmt.Println(err)
  27.     }
  28. }
读取已有文档

  1. package main

  2. import (
  3.     "fmt"

  4.     "github.com/xuri/excelize/v2"
  5. )

  6. func main() {
  7.     f, err := excelize.OpenFile("Book1.xlsx")
  8.     if err != nil {
  9.         fmt.Println(err)
  10.         return
  11.     }
  12.     defer func() {
  13.         // 关闭工作簿
  14.         if err := f.Close(); err != nil {
  15.             fmt.Println(err)
  16.         }
  17.     }()
  18.     // 获取工作表中指定单元格的值
  19.     cell, err := f.GetCellValue("Sheet1", "B2")
  20.     if err != nil {
  21.         fmt.Println(err)
  22.         return
  23.     }
  24.     fmt.Println(cell)
  25.     // 获取 Sheet1 上所有单元格
  26.     rows, err := f.GetRows("Sheet1")
  27.     if err != nil {
  28.         fmt.Println(err)
  29.         return
  30.     }
  31.     for _, row := range rows {
  32.         for _, colCell := range row {
  33.             fmt.Print(colCell, "\t")
  34.         }
  35.         fmt.Println()
  36.     }
  37. }

向 Excel 文档中插入图表

  1. package main

  2. import (
  3.     "fmt"

  4.     "github.com/xuri/excelize/v2"
  5. )

  6. func main() {
  7.     f := excelize.NewFile()
  8.     defer func() {
  9.         if err := f.Close(); err != nil {
  10.             fmt.Println(err)
  11.         }
  12.     }()
  13.     for idx, row := range [][]interface{}{
  14.         {nil, "Apple", "Orange", "Pear"}, {"Small", 2, 3, 3},
  15.         {"Normal", 5, 2, 4}, {"Large", 6, 7, 8},
  16.     } {
  17.         cell, err := excelize.CoordinatesToCellName(1, idx+1)
  18.         if err != nil {
  19.             fmt.Println(err)
  20.             return
  21.         }
  22.         f.SetSheetRow("Sheet1", cell, &row)
  23.     }
  24.     if err := f.AddChart("Sheet1", "E1", &excelize.Chart{
  25.         Type: excelize.Col3DClustered,
  26.         Series: []excelize.ChartSeries{
  27.             {
  28.                 Name: "Sheet1!$A$2",
  29.                 Categories: "Sheet1!$B$1:$D$1",
  30.                 Values: "Sheet1!$B$2:$D$2",
  31.             },
  32.             {
  33.                 Name: "Sheet1!$A$3",
  34.                 Categories: "Sheet1!$B$1:$D$1",
  35.                 Values: "Sheet1!$B$3:$D$3",
  36.             },
  37.             {
  38.                 Name: "Sheet1!$A$4",
  39.                 Categories: "Sheet1!$B$1:$D$1",
  40.                 Values: "Sheet1!$B$4:$D$4",
  41.             }},
  42.         Title: excelize.ChartTitle{
  43.             Name: "Fruit 3D Clustered Column Chart",
  44.         },
  45.     }); err != nil {
  46.         fmt.Println(err)
  47.         return
  48.     }
  49.     // 根据指定路径保存文件
  50.     if err := f.SaveAs("Book1.xlsx"); err != nil {
  51.         fmt.Println(err)
  52.     }
  53. }















向 Excel 文档中插入图片

  1. package main

  2. import (
  3.     "fmt"
  4.     _ "image/gif"
  5.     _ "image/jpeg"
  6.     _ "image/png"

  7.     "github.com/xuri/excelize/v2"
  8. )

  9. func main() {
  10.     f, err := excelize.OpenFile("Book1.xlsx")
  11.     if err != nil {
  12.         fmt.Println(err)
  13.         return
  14.     }
  15.     defer func() {
  16.         // 关闭工作簿
  17.         if err := f.Close(); err != nil {
  18.             fmt.Println(err)
  19.         }
  20.     }()
  21.     // 插入图片
  22.     if err := f.AddPicture("Sheet1", "A2", "image.png", nil); err != nil {
  23.         fmt.Println(err)
  24.     }
  25.     // 在工作表中插入图片,并设置图片的缩放比例
  26.     if err := f.AddPicture("Sheet1", "D2", "image.jpg",
  27.         &excelize.GraphicOptions{ScaleX: 0.5, ScaleY: 0.5}); err != nil {
  28.         fmt.Println(err)
  29.     }
  30.     // 在工作表中插入图片,并设置图片的打印属性
  31.     enable, disable := true, false
  32.     if err := f.AddPicture("Sheet1", "H2", "image.gif",
  33.         &excelize.GraphicOptions{
  34.             PrintObject: &enable,
  35.             LockAspectRatio: false,
  36.             OffsetX: 15,
  37.             OffsetY: 10,
  38.             Locked: &disable,
  39.         }); err != nil {
  40.         fmt.Println(err)
  41.     }
  42.     // 保存工作簿
  43.     if err = f.Save(); err != nil {
  44.         fmt.Println(err)
  45.     }
  46. }
还有其他一些功能,在这里就不一一列举了,详细使用文档以及获取后期的维护更新可以从项目的主页获取

阅读(1702) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~