• Go语言excelize包-01-入门示例、工作簿(创建、打开、保存、关闭、默认字体)、文件Writer


    1. 从几个示例开始

    1.1 创建、写入

    • 示例代码
    package main
    
    import (
    	"fmt"
    
    	"github.com/xuri/excelize/v2"
    )
    
    func main() {
    	f := excelize.NewFile()
    	// 创建工作表
    	indexXiShu := f.NewSheet("西蜀")
    	f.NewSheet("东吴")
    	f.NewSheet("曹魏")
    	// 向表中单元格写入数据
    	f.SetCellValue("西蜀", "B2", "刘备")
    	f.SetCellValue("西蜀", "B3", "关羽")
    	f.SetCellValue("西蜀", "B4", "张飞")
    	f.SetCellValue("东吴", "B2", "孙权")
    	f.SetCellValue("曹魏", "B2", "曹操")
    	// 设置工作簿的默认工作表
    	f.SetActiveSheet(indexXiShu)
    	// 根据指定路径保存文件
    	if err := f.SaveAs("sanGuo.xlsx"); err != nil {
    		fmt.Println(err)
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 生成表格如下
      在这里插入图片描述

    1.2 读表

    读上例中创建工作本中的表

    package main
    
    import (
    	"fmt"
    
    	"github.com/xuri/excelize/v2"
    )
    
    func main() {
    	f, err := excelize.OpenFile("sanGuo.xlsx")
    	if err != nil {
    		fmt.Println(err)
    		return
    	}
    	defer func() {
    		if err := f.Close(); err != nil {
    			fmt.Println(err)
    		}
    	}()
    	// 获取 "东吴" Sheet 表中指定单元格的值
    	cell, err := f.GetCellValue("东吴", "B2")
    	if err != nil {
    		fmt.Println(err)
    		return
    	}
    	fmt.Printf("打印 东吴sheet B2格 内容: %q\n",cell)
    
    	// 获取 "西蜀" Sheet 上所有单元格
    	rows, err := f.GetRows("西蜀")
    	if err != nil {
    		fmt.Println(err)
    		return
    	}
    	fmt.Printf("打印西蜀 sheet 内容 : %+v\n",rows)
    	for rowNumber, row := range rows {
    		fmt.Printf("行号:%d\n",rowNumber)
    		for a, colCell := range row {
    			fmt.Printf("   单元格 %d : %q\n",a,colCell)
    		}
    		fmt.Println()
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    结果输出

    打印 东吴sheet B2格 内容: "孙权"
    打印西蜀 sheet 内容 : [[] [ 刘备] [ 关羽] [ 张飞]]
    行号:0
    
    行号:1
       单元格 0 : ""
       单元格 1 : "刘备"
    
    行号:2
       单元格 0 : ""
       单元格 1 : "关羽"
    
    行号:3
       单元格 0 : ""
       单元格 1 : "张飞"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 以上代码,我们打印 rows 变量时可以看到,实际是用一个[][]string表示了sheet中有值的区域: [ [A1 A2] [B1 B2] [C1 C2] ](只是有些值是空的,我们看不到)
    • 在我们遍历单元格打印的时候,可以验证以上结果。

    1.3 数据流

    • 完整代码
    package main
    
    import (
    	"fmt"
    	"net/http"
    
    	"github.com/xuri/excelize/v2"
    )
    
    func process(w http.ResponseWriter, req *http.Request) {
    	file, _, err := req.FormFile("file")
    	if err != nil {
    		fmt.Fprintf(w, err.Error())
    		return
    	}
    	defer file.Close()
    	f, err := excelize.OpenReader(file)
    	if err != nil {
    		fmt.Fprintf(w, err.Error())
    		return
    	}
    	f.NewSheet("NewSheet")
    	w.Header().Set("Content-Disposition", "attachment; filename=Book1.xlsx")
    	w.Header().Set("Content-Type", req.Header.Get("Content-Type"))
    	if _, err := f.WriteTo(w); err != nil {
    		fmt.Fprintf(w, err.Error())
    	}
    	return
    }
    
    func main() {
    	http.HandleFunc("/process", process)
    	http.ListenAndServe(":1840", nil)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • linux服务器上传下载测试
    [root@liubei-02 ~]# curl --location --request GET 'http://10.10.204.78:1840/process' --form 'file=@/tmp/template.xlsx' -O -J
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100 15125    0  7460  100  7665   129k   132k --:--:-- --:--:-- --:--:--  133k
    curl: Saved to filename 'Book1.xlsx'
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2. 工作簿操作

    2.1 创建工作簿

    • 语法
    func NewFile() *File
    
    • 1
    • 示例

    见 1.1

    2.2 打开工作簿

    • 语法
    func OpenFile(filename string, opt ...Options) (*File, error)
    
    • 1
    • 示例

    见1.2

    2.3 保存工作簿

    • 语法
    func (f *File) SaveAs(name string, opt ...Options) error
    
    • 1
    • 示例

    见 1.1

    2.4 关闭工作簿

    • 语法
    func (f *File) Close() error
    
    • 1
    • 示例

    见1.2

    2.5 设置默认字体

    func (f *File) SetDefaultFont(fontName string)
    
    • 1

    2.6 获取默认字体

    func (f *File) GetDefaultFont() string
    
    • 1

    3. 文件 Writer

    3.1 Write

    将当前文件内容写入给定的 io.Writer

    • 语法
    func (f *File) Write(w io.Writer) error
    
    • 1

    3.2 WriteTo

    • 语法
    func (f *File) WriteTo(w io.Writer) (int64, error)
    
    • 1
    • 完整示例

    见 “1.3 数据流”

    3.3 WriteToBuffer

    • 语法
    func (f *File) WriteToBuffer() (*bytes.Buffer, error)
    
    • 1

    在这里插入图片描述

  • 相关阅读:
    网络安全系统性学习路线「全文字详细介绍」
    深度学习(2):图片文字识别
    Mybatis与Spring的集成
    Bug:Mac版Goland无法进行debug
    Golang使用Channel
    一个小台灯
    使用Python中的pytesseract模块实现抓取图片中文字
    Linux中三种安装形式(rpm、tar(解压缩)、yum)
    【牛客刷题】二叉树的镜像
    LeetCode 热题 C++ 53. 最大子数组和 55. 跳跃游戏
  • 原文地址:https://blog.csdn.net/xingzuo_1840/article/details/126689104