一个读写excel的简单程序(golang)

最近总有一些临时统计的需求,比如其他团队生产的一批数据,需要确认这批数据是否入到数仓,提供的列表就是一个excel,我们就需要读取excel中的所有数据,之后查询数仓数据库确认这批数据是否存在,并分别将存在的与不存在的再标记出来。

1、读取excel文件

首先准备一个excel,内容如下,大概有100条数据:

下面实现对该文档的读取,读取方式包括一次性全部读取,适合数据量不大的场景,也包括按行读取,适合数据量大的场景:

func ExcelRead(name string) {f, err := excelize.OpenFile(name)if err != nil {fmt.Println("open file error:", err)return}defer f.Close()// 获取所有sheet的名称sheets := f.GetSheetMap()for _, name := range sheets {// 获取单个sheet的全部内容,正式上线需要考虑内存占用问题rows, err := f.GetRows(name)if err != nil {fmt.Println("get rows error:", err)return}fmt.Println("rows lenth:", len(rows))// 每次读取一行,减少内存占用for i := 0; i < 200; i++ {st, err := f.GetCellValue(name, fmt.Sprintf("A%v", i+2))if err != nil {fmt.Println("get cell value error:", err)}if st == "" {break}et, err := f.GetCellValue(name, fmt.Sprintf("B%v", i+2))if err != nil {fmt.Println("get cell value error:", err)}sub, err := f.GetCellValue(name, fmt.Sprintf("C%v", i+2))if err != nil {fmt.Println("get cell value error:", err)}fmt.Println(st, et, sub)}}
}

运行记录:

2、写excel文件

写excel,那就把第一步读取的excel重新写入到excel中,并写到两个sheet中,内容为三列(A/B/C): 


func ExcelWrite(sheet1 [][]string, sheet2 [][]string) {col := []string{"A", "B", "C"}f := excelize.NewFile()defer f.Close()// 创建名为车端挖掘数据的工作表_, err := f.NewSheet("车端挖掘数据")if err != nil {fmt.Println("new sheet error:", err)return}// 设置单元格的值。f.SetCellValue("车端挖掘数据", "A1", "start_time")f.SetCellValue("车端挖掘数据", "B1", "end_time")f.SetCellValue("车端挖掘数据", "C1", "subject")for i, v := range sheet1 {for k, v1 := range v {f.SetCellValue("车端挖掘数据", col[k]+fmt.Sprintf("%v", i+2), v1)}}// 创建名为车端挖掘数据的工作表sheetName := "云端挖掘数据"index, err := f.NewSheet("云端挖掘数据")if err != nil {fmt.Println("new sheet error:", err)return}// 设置默认sheet,打开表格时,默认显示的sheetf.SetActiveSheet(index)// 设置单元格的值。f.SetCellValue(sheetName, "A1", "start_time")f.SetCellValue(sheetName, "B1", "end_time")f.SetCellValue(sheetName, "C1", "subject")for i, v := range sheet1 {for k, v1 := range v {f.SetCellValue(sheetName, col[k]+fmt.Sprintf("%v", i+2), v1)}}// 将Excel另存为文件if err := f.SaveAs("/Users/liupeng/Downloads/test.xlsx"); err != nil {fmt.Println(err)}
}

运行结果:

3、在excel中生成柱状图

假设我们有这样一组数据:

我们希望将这组数据写入excel,并生成一个柱状图,类似这样:

 代码如下:

func CreateChart() {f := excelize.NewFile()defer f.Close()contents := [][]any{{nil, "Apple", "Orange", "Pear"},{"Small", 2, 3, 3},{"Normal", 5, 2, 4},{"Large", 6, 7, 8},}for idx, row := range contents {cell, err := excelize.CoordinatesToCellName(1, idx+1)if err != nil {fmt.Println(err)return}f.SetSheetRow("Sheet1", cell, &row)}if err := f.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 Chart",},},}); err != nil {fmt.Println(err)return}// Save spreadsheet by the given path.if err := f.SaveAs("/Users/liupeng/Downloads/Book1.xlsx"); err != nil {fmt.Println(err)}
}

以上就是三个基础的操作excel的方法,希望对大家有用。

欢迎投身技术的小伙伴们关注交流~~~~~~~~~~~~~~~~~~。

往期推荐:

我在百度的这10年~~

云冈石窟:翻开这本距今1565年、与天地同久长的石头史书,感受北魏王朝雕刻艺术的巅峰之作。

一个异步架构设计:批量消费RabbitMQ,批量写入Elasticsearch(golang实现)

历经沧桑的应县木塔,在风雨中已等你969年。

从北京到大同,走过600里,跨越1000年。

命令行参数的艺术:Python、Golang、C++技术实现

supervisor,你理应知道。

跑步的第六年,才真正了解运动的意义

微信小程序文章列表焕新颜:从丑小鸭到白天鹅的华丽蜕变

Elasticsearch高级检索对决:search_after+pit和scroll,谁才是最佳选择?

李白:为何两次选择做了上门女婿?

借助tritonserver完成gpt2模型的本地私有化部署

GRPC开发全攻略:从环境搭建到代码实现

武汉抗疫英雄汪勇:平凡人的非凡之举。

趴菜就是趴菜,捯饬3天,才搞出小程序头部banner,还是个半成品

小程序实现文章列表点击跳转公众号详情页

前端小趴菜终于把公众号和开发的不能再磕碜的小程序首页关联上了

【续】开发triton客户端,访问clip-vit-large-patch14模型抽取图片特征。

NVIDIA tritonserver实现CLIP-ViT模型工程化:轻松获取图片特征(by grpc or http)

一文揭秘:Golang+Elasticsearch轻松搭建AI时代的图片搜索服务

轻松搭建Elasticsearch:Mac系统下的安装指南

Kibana for Mac:极简安装教程

RabbitMQ-死信队列(golang)

项目踩坑记--RabbitMq连接过多导致的内存打满

elasticsearch查询语言DSL构建包使用及实现原理(golang)

纳兰性德-我是人间惆怅客,世间唯有『若』字,最难成真

golang操作mysql之利器-gorm

Elasticsearch写入、读取、更新、删除以及批量操作(golang)

抖音视频批量下载工具

tritonserver学习之六:自定义c++、python custom backend实践

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

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

相关文章

【AI面试准备】AI误判案例知识库优化方案

面试题&#xff1a;建立内部知识库&#xff1a;收集AI误判案例训练领域专属模型。 在回答关于“建立内部知识库收集AI误判案例训练领域专属模型”的面试问题时&#xff0c;建议从以下结构化框架展开&#xff0c;既能体现专业性&#xff0c;又能展现解决问题的系统性和实际落地…

Ocelot\Consul\.NetCore的微服务应用案例

案例资料链接&#xff1a;https://download.csdn.net/download/ly1h1/90733765 1.效果 实现两个微服务ServerAPI1和ServerAPI2的负载均衡以及高可用。具体原理&#xff0c;看以下示意图。 2.部署条件 1、腾讯云的轻量化服务器 2、WindowServer2016 3、.NETCore7.0 4、Negut …

中小企业MES系统需求文档

适用对象&#xff1a;中小型离散制造企业&#xff08;年产值1-5亿&#xff0c;员工200-800人&#xff09; 版本&#xff1a;V1.0 日期&#xff1a;2025年5月2日 一、业务背景与目标 1.1 现状痛点 生产黑箱化&#xff1a;车间进度依赖人工汇报&#xff0c;异常响应延迟>2小…

OpenAI最新发布的GPT-4.1系列模型,性能体验如何?

简单来说,这次GPT-4.1的核心思路就是:更实用、更懂开发者、更便宜!OpenAI这次没搞太多花里胡哨的概念,而是实实在在地提升了大家最关心的几个点:写代码、听指令、处理超长文本,而且知识库也更新到了2024年6月。 写代码。要说这次GPT-4.1最亮眼的地方,可能就是写代码这块…

【基础算法】二分查找的多种写法

前言 在算法竞赛中&#xff0c;二分查找使用的频率是非常高的&#xff0c;对于C选手而言&#xff0c;有STL中自带的lower_bound和upper_bound二分查找&#xff0c;可以很方便的进行二分查找。但是非C选手、或者需要自定义多条件查找的情况需要自己写一个二分&#xff0c;本文对…

兰亭妙微:火箭发射界面案例分享

北京蓝蓝设计团队来自清华美院&#xff0c;工作多年&#xff0c;行业经验丰富&#xff0c;专业性很强。我们是热爱设计&#xff0c;设计不仅是我们的专业&#xff0c;我们的职业&#xff0c;还是我们的爱好。每一个蓝蓝设计的设计师都希望自己的设计越来越好&#xff0c;以高标…

完美解决.NET Framework 4.0 中 System.Drawing 库不支持 WebP 格式的图像处理

如果你想在 .NET Framework 4.0 中使用 ImageMagick 处理图片&#xff0c;可以通过 Magick.NET 库来实现。Magick.NET 是 ImageMagick 的 .NET 封装&#xff0c;可以用来读取、写入、编辑图像。 以下是如何使用 Magick.NET 来处理图像并提取图像的宽度和高度。 步骤&#xff…

string--OJ1

链接: 例一 链接: 例er class Solution { public:int myAtoi(string str) {int sign 1;int ret0;int i0;while(str[i] ){i;}if(str[i]||str[i]-){if(str[i]-)sign*-1;i;}while(str[i]>0&&str[i]<9){int rstr[i] - 0;if(ret>INT_MAX/10||(retINT_MAX/10&…

Go 写一个简单的Get和Post请求服务

Go 写一个简单的Get和Post请求服务 ✅ 一、准备工作 安装 Go 官网下载地址 安装后执行&#xff1a; go version安装 VS Code 插件 在 VS Code 插件市场搜索并安装插件&#xff1a;Go&#xff08;由 Go 团队提供&#xff09; 配置环境变量&#xff08;可选&#xff09; 设置 …

哪些因素会影响远程视频监控的质量?浅述EasyCVR视频智能诊断技术

在安防领域&#xff0c;无线监控系统凭借其灵活部署、便捷扩展的特性得到广泛应用。然而&#xff0c;实时监控图像清晰度不足、回放调查受限等问题&#xff0c;严重制约了其应用效果。经分析&#xff0c;摄像机性能、线缆质量、无线网桥性能、交换机配置及供电电压等是影响图像…

Java大师成长计划之第10天:锁与原子操作

&#x1f4e2; 友情提示&#xff1a; 本文由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;平台gpt-4o-mini模型辅助创作完成&#xff0c;旨在提供灵感参考与技术分享&#xff0c;文中关键数据、代码与结论建议通过官方渠道验证。 在多线程编程中&#xff0c;锁与原子…

线性代数——行列式⭐

目录 一、行列式的定义⭐ 1-1、三阶行列式练习 1-2、下面介绍下三角行列式、上三角行列式、对角行列式 ​编辑 二、行列式的性质 2-1、性质1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6 ​编辑 2-2、性质7 2- 3、拉普拉斯定理、克莱姆法则 三…

微软推出数款Phi 4“开放式”人工智能模型

微软周三推出了几款新的“开放式”人工智能模型&#xff0c;其中功能最强大的模型至少在一个基准测试上可与 OpenAI 的 o3-mini 相媲美。所有新的授权模型——Phi 4 mini reasoning、Phi 4 reasoning 和 Phi 4 reasoning plus——都是“推理”模型&#xff0c;这意味着它们能够…

VPN访问SAP组服务器报登陆负载均衡错误88:无法连接到消息服务器(RC=9)

用户反馈用SAPGUI接入SAP时报错&#xff1a;登陆负载均衡错误88&#xff1a;无法连接到消息服务器(RC9) 经了解是通过VPN访问&#xff0c;但VPN没有放行ICMP访问&#xff0c;导致不能PING通&#xff0c;不能确认是网络问题还是什么问题。 解决方案&#xff1a; 1、VPN由原&am…

使用AI-01开发板和开源后端服务搭建整套小智服务系统

使用AI-01开发板和开源后端服务搭建整套小智服务系统 四博智联的AI-01开发板&#xff0c;基于乐鑫ESP32-C2 专属定制的离线语音模组&#xff0c;能够完美的接入小智AI服务平台&#xff0c;再使用开源后端服务&#xff0c;就能够搭建一个完整的小智AI服务系统了。 下面是具体…

字节跳动在GitHub上有哪些开源项目

字节跳动&#xff08;ByteDance&#xff09;在GitHub上开源了许多项目&#xff0c;涵盖前端、后端、云原生、AI、数据库等多个领域。以下是一些典型项目及其简介&#xff1a; 1. 前端 & 跨平台开发 Hippy 仓库: Tencent/Hippy&#xff08;注&#xff1a;Hippy 最初由腾讯开…

超长8分钟Suno V4.5 – 支持一首歌多风格转换啦~~~

f历史文章 Suno AI API接入 - 将AI音乐接入到自己的产品中&#xff0c;支持120并发任务 AI音乐支持中文&#xff0c;实测效果&#xff0c;大家自己听听看喽 2025年新年快乐&#xff0c;Viggle AI打开新年快乐 让照片舞动起来&#xff0c;只要3分钟就可以搞定了&#xff0c;…

vue3+ts项目 配置vue-router

安装vue-router pnpm install vue-router配置 1.src/router/index.ts文件下的内容 import type { App } from vue import type { RouteRecordRaw } from vue-router import { createRouter, createWebHistory } from vue-router import remainingRouter from ./modules/remai…

如何利用dify 生成Fine‑tune 需要的Alpaca 格式数据

如果你选择llamafactory 格式进行微调&#xff0c;它只是格式是Alpaca格式&#xff0c;dify 的agent dsl 如下&#xff0c;你可以导入本地的dify 或者导入cloud 版本的&#xff1b;测试版本是0.1.5 app:description: 上传文件&#xff0c;基于文件内容&#xff0c;使用 Silico…

C++开发指南

一、C++ 是什么? C++ 是一种强大、灵活、高性能的系统级编程语言,由 Bjarne Stroustrup 在 20 世纪 80 年代初开发,是 C 语言的超集。它既支持面向过程编程,也支持面向对象、泛型、函数式等现代范式。 C++ 被广泛应用于: 系统软件(如操作系统、编译器)游戏开发(如 Un…