【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操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/836816.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

操作抖音小店亏钱?是哪方面导致的?赶紧自查!

大家好&#xff0c;我是电商小V 我也经常去浏览网上的一些帖子&#xff0c;一些帖子就是说开抖音小店运营一年多了不出单&#xff0c;不转化&#xff0c;还亏钱&#xff0c;做不起来&#xff0c;很多人来问我&#xff0c;做抖音小店是不是不能赚钱&#xff1f; 关于这个问题&am…

04、 .java程序用 editplus 工具打开的过程及在 editplus 工具中配置 java/javac 命令的过程

EditPlus 工具的使用&#xff1a; 1、安装 editplus 工具的过程&#xff1a;其一、安装包地址&#xff1a;其二、安装步骤&#xff1a; 2、使用 editplus 工具打开 .java 程序的过程&#xff1a;其一、修改默认打开 .java 的工具&#xff1a;其二、效果展示&#xff1a; 3、在 …

安全测试工具BurpSuite安装和使用

1.安装 下载地址&#xff1a;https://pan.baidu.com/s/1YJbZGAfVKLsQmNeZYZXEeQ 提取码: yyds 打开cmd&#xff0c;运行以下指令&#xff0c;打开keygen界面&#xff1a; java -jar "C:\soft\BurpSuite v2.1\burp-loader-keygen-2.jar" 点击Run按钮&#xff0c;弹…

flash attention的CUDA实现探讨-V3

之前关于flash attention的实现参考添加链接描述,添加链接描述,添加链接描述 lash attention的数学变换:给定三个矩阵Q,K,V,形状都是[N,d],计算S=QK.T,然后针对dim=1做softmax,然后和V继续做矩阵乘法得到形状为[N,d]的输出矩阵O,即O=softmax(QK.T,dim=1)V。 下面本人的…

01-02-1

1、day10作业 使用的代码 #include<stdio.h> void change(int* i) {*i(*i) / 2; } int main() {int i 0;scanf("%d", &i);change(&i);printf("%d", i);return 0; } ​ ​ 2、day11作业 使用的代码 #include<stdio.h> #include<…

Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Kubernetes渐进式学习-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 1. 前言 2. 部署Node服务 2.1. 前置环境安装 2.2. 将Node服务加…

【java9】java9新特性概述

经过4次的跳票&#xff0c;历经曲折的Java9最终在2017年9月21日发布。因为里面加入的模块化系统&#xff0c;在最初设想的时候并没有想过那么复杂&#xff0c;花费的时间超出预估时间。距离java8大约三年时间。 Java9提供了超过150项新功能特性&#xff0c;包括备受期待的模块…

MySQL基础入门【mysql初识 | 数据库操作 | 表操作 | sql数据类型】

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 一&#xff0c;为什么会有…

【鸿蒙+全国产瑞芯微】智慧楼宇解决方案 | 如何实现多场景下智慧化、精细化楼宇管理?

随着数字化、智能化与工作生活的联结日渐紧密&#xff0c;聚焦人性化服务&#xff0c;以数字和科技匹配多重需求&#xff0c;加速商业楼宇智能化转型的脚步&#xff0c;逐步形成智慧楼宇产品矩阵。 方案亮点 01/数字标牌——形象展示 企业文化宣传、公告通知等 播放内容统一远…

uni-app跨端兼容

1.样式兼容 小程序端不支持*选择器&#xff0c;可以使用&#xff08;view,text&#xff09; 页面视口差异(tabar页、普通页) H5端默认开始scoped 例如骨架屏样式出现问题&#xff0c;需要将之前的样式拷贝到骨架屏中 提示&#xff1a;H5端是单页面应用&#xff0c;scoped隔离…

轴承制造企业“数智化”突破口

轴承是当代机械设备中一种重要零部件。它的主要功能是支撑机械旋转体&#xff0c;降低其运动过程中的摩擦系数&#xff0c;并保证其回转精度。轴承是工业核心基础零部件&#xff0c;对国民经济发展和国防建设起着重要的支撑作用。 轴承企业普遍采用以销定产的经营模式&#xf…

【排序算法】之希尔排序

一、算法介绍 希尔排序(Shell Sort)是插入排序的一种&#xff0c;它是针对直接插入排序算法的改进。希尔排序又称缩小增量排序&#xff0c;因 DL.Shell 于 1959 年提出而得名。它通过比较相距一定间隔的元素来进行&#xff0c;各趟比较所用的距离随着算法的进行而减小&#xf…

消息队列——Kafka

1、什么是消息队列&#xff0c;什么是Kafka&#xff1f; 我们通常说的消息队列&#xff0c;简称MQ&#xff08;Message Queue&#xff09;&#xff0c;它其实就指消息中间件&#xff0c;比较流行的开源消息中间件有&#xff1a;Kafka、RabbitMQ、RocketMQ等。今天我们要介绍的…

qt移植到imx6ull运行(qt部署到imx6ull)

这个事情对于小白来说确实不是很友好&#xff0c;会经常出现错误&#xff0c;我弄了两天终于弄好了 我主要参考了https://blog.csdn.net/m0_61738650/article/details/131269561 https://blog.csdn.net/m0_61738650/article/details/131171914这两个教程 我现在来简述一下流程…

【项目】Boost搜索引擎

项目相关背景 现在市面上已经出现很多搜索引擎&#xff0c;比如&#xff1a;百度、Google、Bing等等&#xff0c;它们都是全网性搜索 而我做得项目就像cplusplus网站中搜索C的相关知识一样&#xff0c;同样做的是站内搜索&#xff0c;它的搜索更垂直。 搜索引擎的宏观原理 ser…

Linux本地部署Nightingale夜莺监控并实现远程访问提高运维效率

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

视频剪辑的技巧:掌握如何高效批量调整视频尺寸的方法

在视频剪辑的过程中&#xff0c;调整视频尺寸是一个常见的需求。无论是为了适应不同平台的播放要求&#xff0c;还是为了统一多个视频的尺寸以提升观看体验&#xff0c;掌握高效批量调整视频尺寸的技巧都显得尤为重要。本文将为您详细介绍云炫AI智剪如何高效地进行这一操作&…

通往糊涂之路 The road to serfdom

最近被推送了一本书&#xff0c;哈耶克的............ 试一试&#xff0c;看看能不能看懂&#xff0c;也许是通往糊涂之路。

Windows Qt中支持heic 图片显示

安装vcpkg&#xff1a; git clone https://github.com/microsoft/vcpkg 执行脚本&#xff1a; .\vcpkg\bootstrap-vcpkg.bat 在安装之前如果需要指定vs的编译器&#xff0c; 在如下文件中做更改&#xff0c; 我指定的是用vs2019编译的&#xff1a; D:\vcpkg\vcpkg\triplets 增…

谈 postman自动化接口测试

背景描述 有一个项目要使用postman进行接口测试&#xff0c;接口所需参数有&#xff1a; appid: 应用标识&#xff1b; sign&#xff1a;请求签名&#xff0c;需要使用HMACSHA1加密算法计算&#xff0c;签名串是&#xff1a;{appid}u r l {url}url{stamp}&#xff1b; stam…