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