Go语言轻松搞定Excel的操作,简单生成图表

news2024/11/26 23:34:38

原文链接:GO轻松搞定Excel

库简介

Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式,高度兼容带有样式、图片(表)、透视表、切片器等复杂组件的文档,并提供流式读写 API,用于处理包含大规模数据的工作簿。可应用于各类报表平台、云计算、边缘计算等系统。使用本类库要求使用的 Go 语言为 1.18 或更高版本。

开源仓库:github.com/xuri/excelize

使用

安装库

go get github.com/xuri/excelize/v2

创建Excel

在自己的项目中完成了库的安装后,即可使用Excelize创建一个新的Excel文件。

func main() {
	// 新建文件
	file := excelize.NewFile()
	defer func() {
		err := file.Close()
		if err != nil {
			log.Fatalln("关闭文件异常: ", err)
		}
	}()
	// 新建工作簿
	_, err := file.NewSheet("sheet1")
	if err != nil {
		log.Fatalln("创建工作表失败: ", err)
	}
	// 保存文件
	err = file.SaveAs("test.xlsx")
	if err != nil {
		log.Fatalln("保存文件异常: ", err)
	}
}

上面代码中使用NewFile方法新建Excel文件,并使用NewSheet新建工作表最后使用SaveAs方法保存,代码运行后就会在当前目录生成一个test.xlsx的文件,打开文件可看到文件中包含一个sheet1的工作表。

在这里插入图片描述

打开Excel

除了使用代码创建出一个Excel文件,还可以打开一个已经存在的Excel文件。

func main() {
	file, err := excelize.OpenFile("test.xlsx")
	if err != nil {
		log.Fatalln("打开文件异常: ", err)
	}
	defer func() {
		err := file.Close()
		if err != nil {
			log.Fatalln("关闭文件异常: ", err)
		}
	}()
	// 新建工作簿
	_, err = file.NewSheet("sheet2")
	if err != nil {
		log.Fatalln("创建工作表失败: ", err)
	}
	// 保存文件
	err = file.SaveAs("test.xlsx")
	if err != nil {
		log.Fatalln("保存文件异常: ", err)
	}
}

使用上面代码打开第一步的时候创建的test.xlsx文件,然后在文件中新建一个名为sheet2的工作表并保存,运行代码后再次打开test.xlsx文件即可看到在sheet1后新增了sheet2的工作表。
在这里插入图片描述

写入

func main() {
	file, err := excelize.OpenFile("test.xlsx")
	if err != nil {
		log.Fatalln("打开文件异常: ", err)
	}
	defer func() {
		err := file.Close()
		if err != nil {
			log.Fatalln("关闭文件异常: ", err)
		}
	}()

	// 设置单元格值,参数1为工作表名,参数2为单元格,参数3为值
	file.SetCellStr("sheet1", "A1", "姓名")
	file.SetCellStr("sheet1", "A2", "年龄")

	// 保存文件
	err = file.Save()
	if err != nil {
		log.Fatalln("保存文件异常: ", err)
	}
}

在代码中使用SetCell方法可以写入相应的值到表格中,常见SetCell方法如下:
SetCellStr:写入字符类型值
SetCellInt:写入整形值
SetCellBool:写入布尔类型值
SetCellFloat:写入浮点类型值
……

代码运行之后打开test.xlsx文件即可看到对应的单元格已经写入了我们设置好的值

在这里插入图片描述

读取

在读取单元格的时候使用GetCellValue方法,读取的时候没有类型区分,大部分使用这个方法即可。

func readValue() {
	file, err := excelize.OpenFile("test.xlsx")
	if err != nil {
		log.Fatalln("打开文件异常: ", err)
	}
	defer func() {
		err := file.Close()
		if err != nil {
			log.Fatalln("关闭文件异常: ", err)
		}
	}()
	// 设置单元格值,参数1为工作表名,参数2为单元格
	value, err := file.GetCellValue("sheet1", "A1")
	if err != nil {
		log.Fatalln("读取单元格异常: ", err)
	}
	fmt.Println("A1单元格的值为: ", value)
}

在运行代码之后即可在控制台打印出我们读取到的单元格中的值。

在这里插入图片描述

插入图表

先准备一些数据,然后使用Excelize在表格中直接插入图表。

在这里插入图片描述

func main() {
	file, err := excelize.OpenFile("test.xlsx")
	if err != nil {
		log.Fatalln("打开文件异常: ", err)
	}
	defer func() {
		err := file.Close()
		if err != nil {
			log.Fatalln("关闭文件异常: ", err)
		}
	}()
	if err := file.AddChart("Sheet1", "E1", &excelize.Chart{
		Type: excelize.Col3DClustered,
		Series: []excelize.ChartSeries{
			{
				Name:       "Sheet1!$A$2",
				Categories: "Sheet1!$B$1:$D$1",
				Values:     "Sheet1!$B$2:$D$2",
			},
			{
				Name:       "Sheet1!$A$3",
				Categories: "Sheet1!$B$1:$D$1",
				Values:     "Sheet1!$B$3:$D$3",
			},
			{
				Name:       "Sheet1!$A$4",
				Categories: "Sheet1!$B$1:$D$1",
				Values:     "Sheet1!$B$4:$D$4",
			}},
		Title: []excelize.RichTextRun{
			{
				Text: "Fruit 3D Clustered Column Chart",
			},
		},
	}); err != nil {
		log.Fatalln("插入图表异常: ", err)
	}
	// 保存文件
	err = file.Save()
	if err != nil {
		log.Fatalln("保存文件异常: ", err)
	}
}

上面代码中的AddChart就是像工作表中插入图表,第一个参数为工作表名,第二个参数为插入图表的开始单元格,第三个参数则为图表的样式属性,其中Type属性的Col3DClustered表示三维簇状柱形图(其他的图表类型可查看官方文档),Series 指定了绘制哪些数据的信息集合、图例项(系列)和水平(分类)轴标签。

Series 中的详细参数如下表:

作用
Name图例项(系列),在图表图例和公式栏中显示。Name 参数是可选的,如果不指定该值默认将会使用 Series 1 … n 表示。Name 支持使用公式表示,例如:Sheet1!$A$1。
Categories水平(分类)轴标签。在大多数图表类型中,Categories 属性是可选的,默认为形如 1…n 的连续序列。
Values图表数据区域,是 Series 中最重要的参数,也是创建图表时唯一的必选参数。该选项将图表与其显示的工作表数据链接起来。

运行代码后即可在工作表中插入一张图表。

在这里插入图片描述

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

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

相关文章

微信小程序接入lottie动画

1、注意:canvas渲染出来的层级太高,当有弹窗的情况会暴露在弹窗外 模拟器上会有这个问题,线上版本不会有 2、需求 需要把lottie动画在小程序的环境下进行展示 3、什么是lottie动画 由Airbnb开发并开源。允许设计师将复杂的矢量动画导出为…

【嵌入式】SD NAND:SD卡的集成与优化

嵌入式SD卡,也称为SD NAND或贴片式SD卡,是一种专为空间受限的设备设计的存储解决方案。这种存储卡与传统的SD卡不同,它采用贴片式封装,可以直接焊接到设备的PCB上,从而为电子设备提供内置存储功能。以下是嵌入式SD卡的…

【论文精读】ViM: Out-Of-Distribution with Virtual-logit Matching 使用虚拟分对数匹配的分布外检测

文章目录 一、文章概览(一)问题来源(二)文章的主要工作(三)相关研究 二、动机:Logits 中缺失的信息(一)logits(三)基于零空间的 OOD 评分&#xf…

Python单行代码:一招鲜,吃遍天

大家好,在Python编程中,我们时常需要高效、简洁的代码来解决复杂的问题。今天,我将向大家介绍10个非常有用的Python单行代码。 一行代码指的是将复杂的任务浓缩在一行代码中完成。它充分利用Python的简洁和强大,使代码更简洁、更…

grafana连接influxdb2.x做数据大盘

连接influxdb 展示数据 新建仪表盘 选择存储库 设置展示

数据可视化---绘制常用图表,组合图表,定制图表主题

题目一:绘制桑基图,展示某商铺新老客服群体的商品喜好 编写程序。根据第9.3.7,绘制桑基图,展示某商铺新老客服群体的商品喜好。 运行代码: #绘制桑基图,展示某商铺新老客服群体的商品喜好 from pyecharts…

男士内裤哪个品牌质量好?国内质量好的男士内裤推荐

今天想和大家分享一个虽不起眼但至关重要的时尚单品——男士内裤。它可能不像外套或鞋子那样引人注目,但却承载着男士们日常的舒适与健康。选择一款合适的男士内裤,不仅能提升穿着体验,更是展现个人品味和生活态度的关键。以下是一些选择内裤…

机器学习实战19-利用机器学习模型与算法实现销售数据的归因分析与图形生成

大家好,我是微学AI,今天给大家介绍一下机器学习实战19-利用机器学习模型与算法实现销售数据的归因分析与图形生成。 归因分析是数据分析中的一个重要环节,它主要用于确定不同因素对特定结果(如销售额、转化率等)的贡献…

Nuxt.js 深入浅出:目录结构与文件组织详解

title: Nuxt.js 深入浅出:目录结构与文件组织详解 date: 2024/6/18 updated: 2024/6/18 author: cmdragon excerpt: 摘要:本文详述了Nuxt.js框架中关键目录与配置文件的作用及使用方法,包括布局设定、页面结构管理、插件集成、静态资源处理…

Linux安装并配置Java

1、Linux操作系统安装Java 1.1、下载Java JDK解压包 官方提供的网址: 选择Linux版本 下载列表选择最后一项,通过解压方式安装 倒数第二项是以rpm方式进行安装,另一篇安装MySQL时就是用到rpm方法。 1.2、解压JDK tar -zxvf jdk-8u411-lin…

建筑幕墙甲级设计资质:申请条件与评分标准

建筑幕墙甲级设计资质的申请条件与评分标准可以清晰归纳如下: 申请条件 一、企业基本情况 独立企业法人资格:企业需具有独立企业法人资格。注册资本:注册资本不少于300万元人民币。 二、技术人员条件 主要技术负责人或总工程师&#xff…

1688新品爆款筛选技巧,电商小白也能秒变选品达人

不管是做淘宝、拼多多、抖音、小红书、京东等国内电商平台的商家,可能都有去1688选品的需求。电商环境越来越卷,为了迎合市场和消费者,商家必须不断推陈出新,挖掘潜力新品。 所以有的商友表示想选1688上所有带新品标识的品&#…

Hi3861 OpenHarmony嵌入式应用入门--轮询按键

本篇介绍使用轮询方式读取gpio状态来判断按键状态。 原理图如下 GPIO API API名称 说明 hi_u32 hi_gpio_init(hi_void); GPIO模块初始化 hi_u32 hi_io_set_pull(hi_io_name id, hi_io_pull val); 设置某个IO上下拉功能。 hi_u32 hi_gpio_set_dir(hi_gpio_idx id, hi_gpi…

ollama部署本地大模型

文章目录 一、Ollama1.ollama简介2.安装流程(1)官网下载ollama(2)选择特定的大模型版本下载安装(3)测试 二、spring项目集成Ollama的大模型1.环境信息2.配置文件(1)application.yml&…

shell命令(进程管理和用户管理)

一、进程处理相关命令 1、进程的概念 进程的概念主要有两点: 进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域( text region )、数据区域( data region )和堆栈&am…

基于Spark3.3.4版本,实现Standalone 模式高可用集群部署

目录 一、环境描述 二、部署Spark 节点 2.1 下载资源包 2.2 解压 2.3 配置 2.3.1 配置环境变量 2.3.2 修改workers配置文件 2.3.3 修改spark.env.sh文件 2.3.4 修改spark-defaults.conf 2.4 分发 2.5 启动服务 2.5.1 启动zookeeper 2.5.2 启动hdfs 2.5.3 启动spar…

视频融合平台LntonCVS视频监控汇聚平台:构建多元接入与智能管理的安防新生态

一、视频融合平台概述 视频融合平台支持多种协议和设备类型的接入,包括GB28181、Onvif、RTSP、RTMP、海康SDK、Ehome、大华SDK、宇视SDK等。它能够统一整合和管理来自不同品牌、不同协议的视频资源,构建视频数据资源池,并通过视频资源目录为…

zemax默认函数评价设定规则

--转自挑衅冰雪 矩形阵列: 系统波前不能使用像差系数表示,系统中包含非圆形通光孔径的情况(如矩形,椭圆)。 高斯求积: 具有环形光瞳和旋转对称系统 矩形阵列评价函数操作数要远大于高斯求积 可先用高斯…

【HarmonyOS NEXT】设置组件不同状态下的样式

属性 名称 参数类型 描述 stateStyles StateStyles 设置组件不同状态的样式。 从API version 9开始,该接口支持在ArkTS卡片中使用。 StateStyles接口说明 从API version 9开始,该接口支持在ArkTS卡片中使用。只支持通用属性。 状态名称 类型 必…

智能名片小程序源码系统 销售名片+企业商城 前后端分离+源代码包+搭建部署教程

系统概述 在当今数字化快速发展的时代,传统的商务交流方式逐渐显露出其局限性。为了满足企业和个人更加高效、便捷地展示和推广自身的需求,智能名片小程序源码系统应运而生。这一系统的开发旨在为用户提供一个集销售名片和企业商城于一体的综合性平台&a…