【Golang】基于 excelize 的 Excel 工具包


 在日常的开发中,我们经常需要对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.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方法来实现这个功能。

// 设置窗格冻结
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 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操作。

  • 18
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值