• Go语言excelize包-02-工作表操作


    1. 新建工作表

    • 语法
    func (f *File) NewSheet(sheet string) int
    
    • 1
    • 示例

    见 1.1

    2. 删除工作表

    func (f *File) DeleteSheet(sheet string)
    
    • 1

    3. 复制工作表

    将第"x"张表的内容,复制到已有的第“y”张表。

    • 语法
    func (f *File) CopySheet(from, to int) error
    
    • 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", "曹操")
    	//第1张表的内容复制到第2张表(从0号开始计)
    	f.CopySheet(1,2)
    	// 设置工作簿的默认工作表
    	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
    • 28
    • 29

    说明:

    • 创建的代码创建了四张表: sheet1(创建工作簿时默认创建)、“西蜀”、“东吴”、“曹魏”
    • 从第1张表复制(0号开始计),即复制“西蜀”表
    • 复制到第2张表,即复制到“东吴表”
    • 如果目标表的值超出了已有表,则不会新创建(什么也不会发生)
    • 查看结果
      如下可见,“东吴”表复制了“西蜀”表的内容。且原有内容被覆盖。
      在这里插入图片描述

    4. 工作表分组

    4.1 创建组

    • 语法
    func (f *File) GroupSheets(sheets []string) error
    
    • 1
    • 示例
    err = f.GroupSheets([]string{"西蜀","东吴"})
    
    • 1

    4.2 删除分组

    • 语法
    func (f *File) UngroupSheets() error
    
    • 1
    • 示例
    err := f.UngroupSheets()
    
    • 1

    5. 默认工作表

    5.1 设置默认工作表

    • 语法
    func (f *File) SetActiveSheet(index int)
    
    • 1
    • 示例

    见 1.1

    5.2 获取默认工作表

    • 语法
    func (f *File) GetActiveSheetIndex() int
    
    • 1

    6. 工作表可见性

    6.1 设置工作表可见性

    • 语法
    func (f *File) SetSheetVisible(sheet string, visible bool) error
    
    • 1

    visible 的值 true表示可见,flase表示不可见。

    • 示例

    隐藏东吴表

    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.SetSheetVisible("东吴",false)
    
    	// 设置工作簿的默认工作表
    	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
    • 28
    • 29
    • 结果显示
      在这里插入图片描述
      如图可见,东吴表被隐藏。

    6.2 获取工作表可见性

    • 代码
    func (f *File) GetSheetVisible(sheet string) bool
    
    • 1
    • 示例

    上例中添加如下代码:

    statusDongWu := f.GetSheetVisible("东吴")
    fmt.Printf("东吴表的状态是:%t ",statusDongWu)
    
    • 1
    • 2

    结果显示

    东吴表的状态是:false
    
    • 1

    7. 表格整体属性

    • 语法
    func (f *File) SetSheetFormatPr(sheet string, opts ...SheetFormatPrOptions) error
    
    • 1
    • 可选参数
    可选格式参数作用数据类型
    BaseColWidth基础宽度uint8
    DefaultColWidth默认列宽float64
    DefaultRowHeight默认行高float64
    CustomHeight自定义高度bool
    ZeroHeight表格高仅为有内容的部分bool
    ThickTop顶部厚bool
    ThickBottom底部厚bool

    7.1 自定义列宽

    • 语法示例
    f.SetSheetFormatPr("西蜀",excelize.DefaultColWidth(30.0))
    
    • 1

    或者

    f.SetSheetFormatPr("西蜀",excelize.BaseColWidth(30))
    
    • 1
    • 完整示例
    package main
    
    import (
    	"fmt"
    
    	"github.com/xuri/excelize/v2"
    )
    
    func main() {
    	f := excelize.NewFile()
    	// 创建工作表
    	indexXiShu := f.NewSheet("西蜀")
    	// 向表中单元格写入数据
    	f.SetCellValue("西蜀", "A1", "刘备")
    	f.SetCellValue("西蜀", "A2", "关羽")
    	f.SetCellValue("西蜀", "A3", "张飞")
    	f.SetSheetFormatPr("西蜀",excelize.DefaultColWidth(30.0))
    
    	// 设置工作簿的默认工作表
    	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
    • 结果显示
      在这里插入图片描述

    7.2 自定义行高

    • 语法示例

    处设置默认列宽之外还需要设置 自定义列宽为true

    f.SetSheetFormatPr("西蜀",excelize.DefaultRowHeight(30.0),excelize.CustomHeight(true))
    
    • 1
    • 完整示例
    package main
    
    import (
    	"fmt"
    
    	"github.com/xuri/excelize/v2"
    )
    
    func main() {
    	f := excelize.NewFile()
    	// 创建工作表
    	indexXiShu := f.NewSheet("西蜀")
    
    	// 向表中单元格写入数据
    	f.SetCellValue("西蜀", "A1", "刘备")
    	f.SetCellValue("西蜀", "A2", "关羽")
    	f.SetCellValue("西蜀", "A3", "张飞")
    	f.SetSheetFormatPr("西蜀",excelize.DefaultRowHeight(30.0),excelize.CustomHeight(true))
    
    	// 设置工作簿的默认工作表
    	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
    • 结果显示
      在这里插入图片描述

    7.3 行高为内容部分

    • 语法示例
    f.SetSheetFormatPr("西蜀",excelize.ZeroHeight(true))
    
    • 1
    • 完整示例
    package main
    
    import (
    	"fmt"
    
    	"github.com/xuri/excelize/v2"
    )
    
    func main() {
    	f := excelize.NewFile()
    	// 创建工作表
    	indexXiShu := f.NewSheet("西蜀")
    
    	// 向表中单元格写入数据
    	f.SetCellValue("西蜀", "A1", "刘备")
    	f.SetCellValue("西蜀", "A2", "关羽")
    	f.SetCellValue("西蜀", "A3", "张飞")
    	f.SetSheetFormatPr("西蜀",excelize.ZeroHeight(true))
    
    	// 设置工作簿的默认工作表
    	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
    • 结果显示
      在这里插入图片描述

    7.4 获取表格属性

    • 语法
    func (f *File) GetSheetFormatPr(sheet string, opts ...SheetFormatPrOptionsPtr) error
    
    • 1
    • 完整示例

    说明:该示例摘自官方文档。

    package main
    
    import (
    	"fmt"
    	"github.com/xuri/excelize/v2"
    )
    
    func main() {
    	f := excelize.NewFile()
    	const sheet = "Sheet1"
    
    	var (
    		baseColWidth     excelize.BaseColWidth
    		defaultColWidth  excelize.DefaultColWidth
    		defaultRowHeight excelize.DefaultRowHeight
    		customHeight     excelize.CustomHeight
    		zeroHeight       excelize.ZeroHeight
    		thickTop         excelize.ThickTop
    		thickBottom      excelize.ThickBottom
    	)
    
    	if err := f.GetSheetFormatPr(sheet,
    		&baseColWidth,
    		&defaultColWidth,
    		&defaultRowHeight,
    		&customHeight,
    		&zeroHeight,
    		&thickTop,
    		&thickBottom,
    	); err != nil {
    		fmt.Println(err)
    	}
    	fmt.Println("Defaults:")
    	fmt.Println("- baseColWidth:", baseColWidth)
    	fmt.Println("- defaultColWidth:", defaultColWidth)
    	fmt.Println("- defaultRowHeight:", defaultRowHeight)
    	fmt.Println("- customHeight:", customHeight)
    	fmt.Println("- zeroHeight:", zeroHeight)
    	fmt.Println("- thickTop:", thickTop)
    	fmt.Println("- thickBottom:", thickBottom)
    }
    
    • 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
    • 结果显示
    Defaults:
    - baseColWidth: 0
    - defaultColWidth: 0
    - defaultRowHeight: 15
    - customHeight: false
    - zeroHeight: false
    - thickTop: false
    - thickBottom: false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    8. 表名

    8.1 根据索引获取工作表名

    • 语法
    func (f *File) GetSheetName(index int) (name string)
    
    • 1
    • 示例
    package main
    
    import (
    	"fmt"
    	"github.com/xuri/excelize/v2"
    )
    
    func main() {
    	f := excelize.NewFile()
    	sheetName := f.GetSheetName(0)
    	fmt.Println(sheetName)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    结果显示

    Sheet1
    
    • 1

    8.2 根据表名获取工作表索引

    • 语法
    func (f *File) GetSheetIndex(sheet string) int
    
    • 1

    表不存在返回-1

    8.3 获取工作表列表

    func (f *File) GetSheetList() []string
    
    • 1

    8.4 修改工作表名

    • 语法
    func (f *File) SetSheetName(oldName, newName string)
    
    • 1
    • 完整示例
    package main
    
    import (
    	"fmt"
    	"github.com/xuri/excelize/v2"
    )
    
    func main() {
    	f := excelize.NewFile()
    	fmt.Println("修改前0号表表名:",f.GetSheetName(0))
        f.SetSheetName("Sheet1","xiShu")
    	fmt.Println("修改后0号表表名:",f.GetSheetName(0))
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    结果显示

    修改前0号表表名: Sheet1
    修改后0号表表名: xiShu
    
    • 1
    • 2

    9. 表查询

    • 语法
    func (f *File) SearchSheet(sheet string, value string, reg ...bool) ([]string, error)
    
    • 1

    说明:

    • sheet :表名
    • value:要查找的字串
    • reg:是否匹配正则
    • 完整示例
    package main
    
    import (
    	"fmt"
    
    	"github.com/xuri/excelize/v2"
    )
    
    func main() {
    	f := excelize.NewFile()
    
    	// 向表中单元格写入数据
    	f.SetCellValue("Sheet1", "A1", "刘备")
    	f.SetCellValue("Sheet1", "A2", "诸葛亮")
    	f.SetCellValue("Sheet1", "A3", "关羽")
    	f.SetCellValue("Sheet1", "A4", "张飞")
    	f.SetCellValue("Sheet1", "A5", "赵云")
    	f.SetCellValue("Sheet1", "A6", "马超")
    	f.SetCellValue("Sheet1", "A7", "黄忠")
    	f.SetCellValue("Sheet1", "A8", "关兴")
    	f.SetCellValue("Sheet1", "A9", "关平")
        //精确查找
    	result1,_ := f.SearchSheet("Sheet1","关羽")
    	//正则匹配
        result2,_ := f.SearchSheet("Sheet1","^关.*",true)
        fmt.Printf("精确搜索:%+v\n正则匹配: %+v",result1,result2)
    }
    
    • 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
    • 打印结果
    精确搜索:[A3]
    正则匹配: [A3 A8 A9]
    
    • 1
    • 2

    在这里插入图片描述

  • 相关阅读:
    JAVA---RMI详解1
    uni-app入门:自定义tabbar
    Apache Doris (五十二): Doris Join类型 - Broadcast Join
    如果Controller里有私有的方法,能成功访问吗?
    基于JavaWeb实现ATM机系统
    CentOS7安装Nginx+ModSecurity
    [力扣] 剑指 Offer 第一天 - 包含min函数的栈
    Java基础-----正则表达式
    Thymeleaf学习(3)—— 内置对象
    win10安装JDK详细教程
  • 原文地址:https://blog.csdn.net/xingzuo_1840/article/details/126689164