【Golang】基于 excelize 的 Excel 工具包

2024-05-13 18:04

本文主要是介绍【Golang】基于 excelize 的 Excel 工具包,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

    • 1. 安装excelize库
    • 2. Excel工具代码
      • 2.1 初始化Excel对象
      • 2.2. 常用操作
        • 2.2.1 设置窗格冻结
        • 2.2.2 设置工作表名称
        • 2.2.3 创建工作表
        • 2.2.4 设置单元格值
        • 2.2.5 设置单元格样式
        • 2.2.6 合并单元格
        • 2.2.7 设置行高和列宽
    • 3.使用示例
    • 4.完整代码
    • 5.总结

 在日常的开发中,我们经常需要对Excel进行各种各样的操作,比如生成Excel报表、对Excel数据进行处理等。在Golang中,有一个非常好用的库——excelize,它支持对Excel文件的创建、读取、修改等操作。

1. 安装excelize库

首先,我们需要安装excelize库。在终端中执行以下命令:

go get github.com/xuri/excelize/v2

2. Excel工具代码

2.1 初始化Excel对象

 在使用excelize之前,我们需要初始化一个Excel对象。这个对象包含了Excel文件的信息,以及一些常用的样式。我们可以定义一个Excel结构体,然后创建一个ExcelInit函数来初始化这个结构体。

package utils
import ("github.com/xuri/excelize/v2"
)
var DEFAULT_ROW_HEIGHT = float64(25)
var DEFAULT_COLUMN_WIDTH = float64(18)
// Excel对象结构体
type Excel struct {File          *excelize.FileTitleStyle    int // 标题样式HeadStyle     int // 头样式ContentStyle  int // 主体样式ContentStyle2 int // 主体样式, 带背景色
}
// 初始化一个Excel对象结构体
func ExcelInit() (e *Excel) {e = &Excel{}// excel构建e.File = excelize.NewFile()// 初始化样式e.getTitleRowStyle()e.getHeadRowStyle()e.getDataRowStyle()return e
}

2.2. 常用操作

2.2.1 设置窗格冻结

在Excel中,我们可以通过设置窗格冻结来固定某些行和列,使得它们在滚动时保持可见。在excelize中,我们可以使用SetPaneFreeze方法来实现这个功能。

// 设置窗格冻结
func (e *Excel) SetPaneFreeze(sheet string, col int, row int) error {cell, err := excelize.CoordinatesToCellName(col+1, row+1)if err != nil {return err}return e.File.SetPanes(sheet, &excelize.Panes{Freeze: true, Split: false, XSplit: col, YSplit: row, TopLeftCell: cell, ActivePane: "bottomLeft"})
}
2.2.2 设置工作表名称

我们可以使用SetSheetName方法来设置工作表的名称。

// 设置工作表名称
func (e *Excel) SetSheetName(index int, sheetName string) error {sheet := e.File.GetSheetName(index)return e.File.SetSheetName(sheet, sheetName)
}

使用ChangeSheetName修改工作表名称

func (e *Excel) ChangeSheetName(sheet string, newSheetName string) error {index, err := e.File.GetSheetIndex(sheet)if err != nil {return err}if index >= 0 {err = e.File.SetSheetName(sheet, newSheetName)}return err
}
2.2.3 创建工作表

使用CreateSheet方法可以创建一个新的工作表。如果工作表已存在,则返回该工作表的索引;如果不存在,则创建新的工作表并返回其索引。

// 创建工作表
func (e *Excel) CreateSheet(sheet string) (int, error) {index, err := e.File.GetSheetIndex(sheet)if err != nil {return index, err}if index < 0 {index, err = e.File.NewSheet(sheet)}return index, err
}
2.2.4 设置单元格值

使用SetCellValue方法可以在指定的工作表中设置某个单元格的值。

// 设置单元格值
func (e *Excel) SetCellValue(sheet string, col int, row int, value interface{}) error {cell, err := excelize.CoordinatesToCellName(col, row)if err != nil {return err}return e.File.SetCellValue(sheet, cell, value)
}
2.2.5 设置单元格样式

使用SetCellStyle方法可以为指定工作表中的单元格设置样式。

// 设置单元格样式
func (e *Excel) SetCellStyle(sheet string, col int, row int, styleID int) error {cell, err := excelize.CoordinatesToCellName(col, row)if err != nil {return err}return e.File.SetCellStyle(sheet, cell, cell, styleID)
}

使用SetCellsStyle方法可以为指定工作表范围内的单元格设置样式。

func (e *Excel) SetCellsStyle(sheet string, startCol int, startRow int, endCol int, endRow int, styleID int) error {startCell, err := excelize.CoordinatesToCellName(startCol, startRow)if err != nil {return err}endCell, err := excelize.CoordinatesToCellName(endCol, endRow)if err != nil {return err}return e.File.SetCellStyle(sheet, startCell, endCell, styleID)
}

使用SetCellHeadStyle设置单元格为头样式

func (e *Excel) SetCellHeadStyle(sheet string, col int, row int) error {return e.SetCellStyle(sheet, col, row, e.HeadStyle)
}

使用SetCellsHeadStyle设置范围单元格为头样式

func (e *Excel) SetCellsHeadStyle(sheet string, startCol int, startRow int, endCol int, endRow int) error {return e.SetCellsStyle(sheet, startCol, startRow, endCol, endRow, e.HeadStyle)
}

使用SetCellTitleStyle设置单元格为标题样式

func (e *Excel) SetCellTitleStyle(sheet string, col int, row int) error {return e.SetCellStyle(sheet, col, row, e.TitleStyle)
}

使用SetCellsTitleStyle设置范围单元格为标题样式

func (e *Excel) SetCellsTitleStyle(sheet string, startCol int, startRow int, endCol int, endRow int) error {return e.SetCellsStyle(sheet, startCol, startRow, endCol, endRow, e.TitleStyle)
}

使用SetCellContentStyle设置单元格为正文样式

func (e *Excel) SetCellContentStyle(sheet string, col int, row int) error {return e.SetCellStyle(sheet, col, row, e.ContentStyle)
}

使用SetCellsContentStyle设置范围单元格为正文样式

func (e *Excel) SetCellsContentStyle(sheet string, startCol int, startRow int, endCol int, endRow int) error {return e.SetCellsStyle(sheet, startCol, startRow, endCol, endRow, e.ContentStyle)
}
2.2.6 合并单元格

使用MergeCells方法可以在指定的工作表中合并一个矩形区域的单元格。

// 合并单元格
func (e *Excel) MergeCells(sheet string, startCol, startRow, endCol, endRow int) (err error) {startCell, err := excelize.CoordinatesToCellName(startCol, startRow)if err != nil {return err}endCell, err := excelize.CoordinatesToCellName(endCol, endRow)if err != nil {return err}return e.File.MergeCell(sheet, startCell, endCell)
}
2.2.7 设置行高和列宽

使用SetRowHeight 设置行高

func (e *Excel) SetRowHeight(sheet string, row int, height float64) error {return e.File.SetRowHeight(sheet, row, height)
}

使用SetRowsHeight设置多行高度

func (e *Excel) SetRowsHeight(sheet string, startRow int, endRow int, height float64) (err error) {for i := startRow; i <= endRow; i++ {err = e.File.SetRowHeight(sheet, i, height)if err != nil {return}}return
}

使用SetColWidth设置列宽

func (e *Excel) SetColWidth(sheet string, col int, width float64) error {cell, err := excelize.ColumnNumberToName(col)if err != nil {return err}return e.File.SetColWidth(sheet, cell, cell, width)
}

使用SetColsWidth 设置多列宽度

func (e *Excel) SetColsWidth(sheet string, startCol int, endCol int, width float64) (err error) {startColName, err := excelize.ColumnNumberToName(startCol)if err != nil {return}endColName, err := excelize.ColumnNumberToName(endCol)if err != nil {return}return e.File.SetColWidth(sheet, startColName, endColName, width)
}

使用SetColDefaultWidth 设置列为默认宽度

func (e *Excel) SetColDefaultWidth(sheet string, col int) error {return e.SetColWidth(sheet, col, DEFAULT_COLUMN_WIDTH)
}

使用SetColDefaultWidth 设置多列为默认宽度

func (e *Excel) SetColsDefaultWidth(sheet string, startcol, endcol int) error {return e.SetColsWidth(sheet, startcol, endcol, DEFAULT_COLUMN_WIDTH)
}

使用SetRowDefaultHeight 设置行为默认高度

func (e *Excel) SetRowDefaultHeight(sheet string, row int) error {return e.SetRowHeight(sheet, row, DEFAULT_ROW_HEIGHT)
}

使用SetRowsDefaultHeight 设置多行为默认高度

func (e *Excel) SetRowsDefaultHeight(sheet string, startRow, endRow int) (err error) {return e.SetRowsHeight(sheet, startRow, endRow, DEFAULT_ROW_HEIGHT)
}

3.使用示例

package mainimport ("fmt""github.com/your_project_path/utils"
)func main() {// 初始化Excel对象e := utils.ExcelInit()// 创建一个新的工作表sheetName := "Sheet1"e.CreateSheet(sheetName)// 修改工作表名称e.ChangeSheetName(sheetName, "New Sheet Name")// 设置单元格值e.SetCellValue("New Sheet Name", 1, 1, "Hello World")// 设置单元格样式e.SetCellsTitleStyle("New Sheet Name", 1, 1, 5, 1)// 合并单元格e.MergeCells("New Sheet Name", 1, 1, 5, 1)// 设置行高e.SetRowDefaultHeight("New Sheet Name", 1)// 设置列宽e.SetColsDefaultWidth("New Sheet Name", 1, 5)// 设置单元格样式e.SetCellsTitleStyle("New Sheet Name", 1, 2, 5, 2)// 设置单元格数值for i := 0; i < 5; i++ {e.SetCellValue("New Sheet Name", i+1, 2, i)}// 设置冻结首行e.SetPaneFreeze("New Sheet Name", 0, 1)// 保存文件e.File.SaveAs("output.xlsx")
}

以上示例忽略error返回值,实际使用需要考虑error不为nil的情况。

输出结果:
在这里插入图片描述
请添加图片描述

4.完整代码


 [下载链接]

5.总结

 本文详细介绍了Golang中excelize库的基本使用方法,包括初始化Excel对象、常用操作等。通过这些方法,我们可以轻松地对Excel进行各种各样的操作。在实际开发中,我们可以根据自己的需求,灵活运用这些方法,实现复杂的Excel操作。

这篇关于【Golang】基于 excelize 的 Excel 工具包的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/986425

相关文章

Golang实现基于角色的访问控制(RBAC)的项目实践

《Golang实现基于角色的访问控制(RBAC)的项目实践》基于角色的访问控制(RBAC)是一种安全机制,通过角色来管理用户权限,本文介绍了一种可落地、易扩展的GolangRBAC实现方案,具有一定... 目录一、RBAC 核心模型设计二、RBAC 核心逻辑实现RBAC 管理器定义基础 CRUD:添加用户

C#实现将XML数据自动化地写入Excel文件

《C#实现将XML数据自动化地写入Excel文件》在现代企业级应用中,数据处理与报表生成是核心环节,本文将深入探讨如何利用C#和一款优秀的库,将XML数据自动化地写入Excel文件,有需要的小伙伴可以... 目录理解XML数据结构与Excel的对应关系引入高效工具:使用Spire.XLS for .NETC

C#如何在Excel文档中获取分页信息

《C#如何在Excel文档中获取分页信息》在日常工作中,我们经常需要处理大量的Excel数据,本文将深入探讨如何利用Spire.XLSfor.NET,高效准确地获取Excel文档中的分页信息,包括水平... 目录理解Excel中的分页机制借助 Spire.XLS for .NET 获取分页信息为什么选择 S

Java利用Spire.XLS for Java自动化设置Excel的文档属性

《Java利用Spire.XLSforJava自动化设置Excel的文档属性》一个专业的Excel文件,其文档属性往往能大大提升文件的可管理性和可检索性,下面我们就来看看Java如何使用Spire... 目录Spire.XLS for Java 库介绍与安装Java 设置内置的 Excel 文档属性Java

C#借助Spire.XLS for .NET实现在Excel中添加文档属性

《C#借助Spire.XLSfor.NET实现在Excel中添加文档属性》在日常的数据处理和项目管理中,Excel文档扮演着举足轻重的角色,本文将深入探讨如何在C#中借助强大的第三方库Spire.... 目录为什么需要程序化添加Excel文档属性使用Spire.XLS for .NET库实现文档属性管理Sp

C#实现将Excel工作表拆分为多个窗格

《C#实现将Excel工作表拆分为多个窗格》在日常工作中,我们经常需要处理包含大量数据的Excel文件,本文将深入探讨如何在C#中利用强大的Spire.XLSfor.NET自动化实现Excel工作表的... 目录为什么需要拆分 Excel 窗格借助 Spire.XLS for .NET 实现冻结窗格(Fro

使用Python实现高效复制Excel行列与单元格

《使用Python实现高效复制Excel行列与单元格》在日常办公自动化或数据处理场景中,复制Excel中的单元格、行、列是高频需求,下面我们就来看看如何使用FreeSpire.XLSforPython... 目录一、环境准备:安装Free Spire.XLS for python二、核心实战:复制 Exce

pandas批量拆分与合并Excel文件的实现示例

《pandas批量拆分与合并Excel文件的实现示例》本文介绍了Pandas中基于整数位置的iloc和基于标签的loc方法进行数据索引和切片的操作,并将大Excel文件拆分合并,具有一定的参考价值,感... 目录一、Pandas 进行索引和切编程片的iloc、loc方法二、Pandas批量拆分与合并Exce

使用C#导出Excel数据并保存多种格式的完整示例

《使用C#导出Excel数据并保存多种格式的完整示例》在现代企业信息化管理中,Excel已经成为最常用的数据存储和分析工具,从员工信息表、销售数据报表到财务分析表,几乎所有部门都离不开Excel,本文... 目录引言1. 安装 Spire.XLS2. 创建工作簿和填充数据3. 保存为不同格式4. 效果展示5

Java轻松实现在Excel中插入、提取或删除文本框

《Java轻松实现在Excel中插入、提取或删除文本框》在日常的Java开发中,我们经常需要与Excel文件打交道,当涉及到Excel中的文本框时,许多开发者可能会感到棘手,下面我们就来看看如何使用J... 目录Java操作Excel文本框的实战指南1. 插入Excel文本框2. 提取Excel文本框内容3