目录
-
- [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操作。