【Golang】基于 excelize 的 Excel 工具包

目录

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

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

1. 安装excelize库

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

bash 复制代码
go get github.com/xuri/excelize/v2

2. Excel工具代码

2.1 初始化Excel对象

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

go 复制代码
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.File
	TitleStyle    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方法来实现这个功能。

go 复制代码
// 设置窗格冻结
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方法来设置工作表的名称。

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

使用ChangeSheetName修改工作表名称

go 复制代码
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方法可以创建一个新的工作表。如果工作表已存在,则返回该工作表的索引;如果不存在,则创建新的工作表并返回其索引。

go 复制代码
// 创建工作表
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方法可以在指定的工作表中设置某个单元格的值。

go 复制代码
// 设置单元格值
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方法可以为指定工作表中的单元格设置样式。

go 复制代码
// 设置单元格样式
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方法可以为指定工作表范围内的单元格设置样式。

go 复制代码
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设置单元格为头样式

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

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

go 复制代码
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设置单元格为标题样式

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

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

go 复制代码
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设置单元格为正文样式

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

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

go 复制代码
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方法可以在指定的工作表中合并一个矩形区域的单元格。

go 复制代码
// 合并单元格
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 设置行高

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

使用SetRowsHeight设置多行高度

go 复制代码
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设置列宽

go 复制代码
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 设置多列宽度

go 复制代码
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 设置列为默认宽度

go 复制代码
func (e *Excel) SetColDefaultWidth(sheet string, col int) error {
	return e.SetColWidth(sheet, col, DEFAULT_COLUMN_WIDTH)
}

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

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

使用SetRowDefaultHeight 设置行为默认高度

go 复制代码
func (e *Excel) SetRowDefaultHeight(sheet string, row int) error {
	return e.SetRowHeight(sheet, row, DEFAULT_ROW_HEIGHT)
}

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

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

3.使用示例

go 复制代码
package main

import (
	"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操作。

相关推荐
Lizhihao_8 分钟前
JAVA-队列
java·开发语言
远望清一色27 分钟前
基于MATLAB边缘检测博文
开发语言·算法·matlab
何曾参静谧35 分钟前
「Py」Python基础篇 之 Python都可以做哪些自动化?
开发语言·python·自动化
Prejudices39 分钟前
C++如何调用Python脚本
开发语言·c++·python
我狠狠地刷刷刷刷刷1 小时前
中文分词模拟器
开发语言·python·算法
wyh要好好学习1 小时前
C# WPF 记录DataGrid的表头顺序,下次打开界面时应用到表格中
开发语言·c#·wpf
AitTech1 小时前
C#实现:电脑系统信息的全面获取与监控
开发语言·c#
qing_0406031 小时前
C++——多态
开发语言·c++·多态
孙同学_1 小时前
【C++】—掌握STL vector 类:“Vector简介:动态数组的高效应用”
开发语言·c++
froginwe111 小时前
XML 编辑器:功能、选择与使用技巧
开发语言