当前位置: 首页 > news >正文

Golang 创建 Excel 文件

经常会遇到需要导出数据报表的需求,除了可以通过 encoding/csv 导出 CSV 以外,还可以使用
https://github.com/qax-os/excelize 导出 xlsx 等格式的 excel,下面封装了一个方法,支持多 sheet 的 excel 数据生成,导出按需在接口实现层添加 f.SaveAs("xxx.xlsx") 即可

package excelimport ("fmt""github.com/xuri/excelize/v2"
)type SheetData struct {SheetName stringHeaders   []stringRows      [][]interface{}
}// GenerateExcelBySheets 生成 excel 表格
func GenerateExcelBySheets(sheets []SheetData) (*excelize.File, error) {f := excelize.NewFile()for _, sheet := range sheets {if _, err := f.NewSheet(sheet.SheetName); err != nil {return nil, err}for i, header := range sheet.Headers {if err := f.SetCellValue(sheet.SheetName, GetCellName(i, 1), header); err != nil {return nil, err}}baseIndex := 2if len(sheet.Headers) == 0 {baseIndex = 1}for i, row := range sheet.Rows {for j, val := range row {if err := f.SetCellValue(sheet.SheetName, GetCellName(j, baseIndex+i), val); err != nil {return nil, err}}}}if len(sheets) > 0 {f.SetActiveSheet(0)}return f, nil
}// GetColumnName 获取列名 A-Z, AA-ZZ, AAA-ZZZ
func GetColumnName(col int) string {if col < 26 {return string(rune('A' + col))}return GetColumnName(col/26-1) + GetColumnName(col%26)
}// GetCellName 获取单元格名称 A1, B2, AA1, AB1
func GetCellName(col, row int) string {return fmt.Sprintf("%s%d", GetColumnName(col), row)
}

相关文章:

Golang 创建 Excel 文件

经常会遇到需要导出数据报表的需求&#xff0c;除了可以通过 encoding/csv 导出 CSV 以外&#xff0c;还可以使用 https://github.com/qax-os/excelize 导出 xlsx 等格式的 excel&#xff0c;下面封装了一个方法&#xff0c;支持多 sheet 的 excel 数据生成&#xff0c;导出按需…...

探索GitHub上的两个革命性开源项目

在数字世界中&#xff0c;总有一些项目能够以其创新性和实用性脱颖而出&#xff0c;吸引全球开发者的目光。今天&#xff0c;我们将深入探索GitHub上的两个令人惊叹的开源项目&#xff1a;Comic Translate和GPTPDF&#xff0c;它们不仅改变了我们处理信息的方式&#xff0c;还极…...

SpringBoot框架学习笔记(三):Lombok 和 Spring Initailizr

1 Lombok 1.1 Lombok 介绍 &#xff08;1&#xff09;Lombok 作用 简化JavaBean开发&#xff0c;可以使用Lombok的注解让代码更加简洁Java项目中&#xff0c;很多没有技术含量又必须存在的代码&#xff1a;POJO的getter/setter/toString&#xff1b;异常处理&#xff1b;I/O…...

【ASP.NET网站传值问题】“object”不包含“GetEnumerator”的公共定义,因此 foreach 语句不能作用于“object”类型的变量等

问题一&#xff1a;不允许遍历 原因&#xff1a;实体未强制转化 后端: ViewData["CateGroupList"] grouplist; 前端加上&#xff1a;var catelist ViewData["CateGroupList"] as List<Catelogue>; 这样就可以遍历catelist了 问题二&#xff1a…...

Stateflow中的状态转换表

状态转换表是表达顺序模态逻辑的另一种方式。不要在Stateflow图表中以图形方式绘制状态和转换&#xff0c;而是使用状态转换表以表格格式表示模态逻辑。 使用状态转换表的好处包括&#xff1a; 易于对类列车状态机进行建模&#xff0c;其中模态逻辑涉及从一个状态到其邻居的转换…...

结合Redis解决接口幂等性问题

结合Redis解决接口幂等性问题 引言正文收获 引言 该问题产生背景是根据需求描述&#xff0c;要求对已发布的课程能进行编辑修改&#xff0c;并且要求能进行回滚。 幂等性问题描述&#xff1a;对同一个接口并发请求产生的结果是不变的。 Get 请求以及 Delete 请求天然保证幂等…...

2024算力基础设施安全架构设计与思考(免费下载)

算网安全体系是将数据中心集群、算力枢纽、一体化大数据中心三个层级的安全需求进行工程化解耦&#xff0c;从国家安全角度统筹设计&#xff0c;通过安全 服务化方式&#xff0c;依托威胁情报和指挥协同通道将三层四级安全体系串联贯通&#xff0c;达成一体化大数据安全目标。 …...

ExoPlayer架构详解与源码分析(15)——Renderer

系列文章目录 ExoPlayer架构详解与源码分析&#xff08;1&#xff09;——前言 ExoPlayer架构详解与源码分析&#xff08;2&#xff09;——Player ExoPlayer架构详解与源码分析&#xff08;3&#xff09;——Timeline ExoPlayer架构详解与源码分析&#xff08;4&#xff09;—…...

网络安全-等级保护制度介绍

一、等保发展历程 &#xff08;1&#xff09;1994国务院147号令 第一次提出等级保护概念&#xff0c;要求对信息系统分等级进行保护 &#xff08;2&#xff09;1999年GB17859 国家强制标准发布&#xff0c;信息系统等级保护必须遵循的法规 &#xff08;3&#xff09;2005年公安…...

【介绍下大数据组件之Storm】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…...

React Hook 总结(React 萌新升级打怪中...)

1 useCallback useMemo 和 useCallback 接收的参数都是一样&#xff0c;都是在其依赖项发生变化后才执行&#xff0c;都是返回缓存的值&#xff0c;区别在于 useMemo 返回的是函数运行的结果&#xff0c;useCallback 返回的是函数。 当需要使用 useCallback 的情况通常包括以…...

Typora 1.5.8 版本安装下载教程 (轻量级 Markdown 编辑器),图文步骤详解,免费领取

文章目录 软件介绍软件下载安装步骤激活步骤 软件介绍 Typora是一款基于Markdown语法的轻量级文本编辑器&#xff0c;它的主要目标是为用户提供一个简洁、高效的写作环境。以下是Typora的一些主要特点和功能&#xff1a; 实时预览&#xff1a;Typora支持实时预览功能&#xff0…...

mac docker no space left on device

mac 上 docker 拉取镜像报错 Error response from daemon: write /var/lib/docker/tmp/docker-export-3995807640/b8464f52498789c4ebbc063d508f04e8d2586567fbffa475e3cd9afd3c5a7cf2/layer.tar: no space left on device解决&#xff1a; 增加 docker 虚拟磁盘大小。如下图...

单片机主控的基本电路

论文 1.复位电路 2.启动模式设置接口 3.VBAT供电接口 4.MCU 基本电路 5.参考电压选择端口...

【19】读感 - 架构整洁之道(一)

概述 《架构整洁之道》一书中有提到设计和架构的感念&#xff0c;它们究竟是什么&#xff1f;书是这么说的&#xff0c;它们的层次不一样&#xff0c;架构更“高层级”的说法&#xff0c;这类讨论一般都把“底层”的实现细节排除在外。而设计往往指代的具体的系统底层组织结构…...

多层全连接神经网络(三)---分类问题

问题介绍 机器学习中的监督学习主要分为回归问题和分类问题&#xff0c;我们之前已经讲过回归问题了&#xff0c;它希望预测的结果是连续的&#xff0c;那么分类问题所预测的结果就是离散的类别。这时输入变量可以是离散的&#xff0c;也可以是连续的&#xff0c;而监督学习从数…...

签名优化:请求数据类型不是`application/json`,将只对随机数进行签名计算,例如文件上传接口。

文章目录 I 签名进行请求数据类型类型判断1.1 常见的ContentType1.2 签名切面处理1.3 文件上传案例1.4 处理接口信息背景: 文件上传接口的请求数据类型通常为multipart/form-data,方便携带文本域和使用接口文档进行调试。 如果携带JSON数据,不方便调试接口。 前端数据也要特…...

PostgreSQL的Json数据类型如何使用

PostgreSQL中的JSON数据类型提供了一种灵活的方式来存储JSON&#xff08;JavaScript Object Notation&#xff09;数据。JSON是一种轻量级的数据交换格式&#xff0c;易于人阅读和编写&#xff0c;同时也易于机器解析和生成。在PostgreSQL中&#xff0c;你可以使用JSON和JSONB&…...

SpringData JPA Mongodb 查询部分字段

JPA 网上用的好像不多&#xff0c;找了好多材料以后最终找了这个可行的方案&#xff1a; Query(fields "{tender_id:1,_id:0}")List<MGPltTender> findByTenderIdIsNotNull(PageRequest pageRequest); 调用&#xff1a; Sort sort Sort.by(popularType.getC…...

NC65 设置下拉列表框值

NC65 设置下拉列表框值&#xff0c;如人员任职信息的异动事件&#xff1a; // 只有在入职登记时&#xff0c;才为异动事件下拉框过滤掉【离职】和【离职后变动】两个item DefaultConstEnum[] enumItems initTransevent(); BillItem item getBillCardPanel().getHeadItem(Psn…...

小阿轩yx-高性能内存对象缓存

小阿轩yx-高性能内存对象缓存 案例分析 案例概述 Memcached 是一款开源的高性能分布式内存对象缓存系统用于很多网站提高访问速度&#xff0c;尤其是需要频繁访问数据的大型网站是典型的 C/S 架构&#xff0c;需要构建 Memcached 服务器端与 Memcached API 客户端用 C 语言…...

华中师范大学学报人文社会科学版

一、《华中师范大学学报(人文社会科学版)》是国家教育部主管、华中师范大学主办的人文社会科学综合性学术期刊。本刊用稿以质量为标准,不分内稿外稿。文稿一经发表,即付报酬,不收版面费。 二、根据教育部和新闻出版总署颁发的社会科学学报编排规范,来稿应注意以下各项: 1. 题…...

CI/CD的node.js编译报错npm ERR! network request to https://registry.npmjs.org/

1、背景&#xff1a; 在维护paas云平台过程中&#xff0c;有研发反馈paas云平台上的CI/CD的前端流水线执行异常。 2、问题描述&#xff1a; 流水线执行的是前端编译&#xff0c;使用的是node.js环境。报错内容如下&#xff1a; 2024-07-18T01:23:04.203585287Z npm ERR! code E…...

用ssh tunnel的方式设置 AWS DocumentDB 公网访问

AWS DocumentDB的设定是只允许VPC内进行访问的&#xff0c;同时官方文档给了步骤&#xff0c;通过ssh tunnel的方式&#xff0c;可以从公网&#xff0c;或者从VPC外的网络&#xff0c;对DocumentDB进行访问。 我阅读了AWS官方文档并测试了这个步骤&#xff0c;如下是详细的步骤…...

基于电鸿(电力鸿蒙)的边缘计算网关,支持定制

1 产品信息 边缘计算网关基于平头哥 TH1520 芯片&#xff0c;支持 OpenHarmony 小型系统&#xff0c;是 连接物联网设备和云平台的重要枢纽&#xff0c;可应用于城市基础设施&#xff0c;智能工厂&#xff0c;智能建筑&#xff0c;营业网点&#xff0c;运营 服务中心相关场…...

WPF之URI的使用

pack://application:, pack://application:, 是一个在 WPF (Windows Presentation Foundation) 应用程序中用于指定资源位置的 URI (统一资源标识符) 方案的特定格式。这个格式用于访问嵌入在应用程序程序集&#xff08;assemblies&#xff09;中的资源&#xff0c;如图像、XA…...

Web开发:ASP.NET CORE前后端交互之AJAX(含基础Demo)

目录 一、后端 二、前端 三、代码位置 四、实现效果 五、关键的点 1.后端传输给前端&#xff1a; 2.前端传输给后端 一、后端 using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.AspNetCore.Mvc.Rendering; using WebAppl…...

经典神经网络(14)T5模型原理详解及其微调(文本摘要)

经典神经网络(14)T5模型原理详解及其微调(文本摘要) 2018 年&#xff0c;谷歌发布基于双向 Transformer 的大规模预训练语言模型 BERT&#xff0c;而后一系列基于 BERT 的研究工作如春笋般涌现&#xff0c;预训练模型也成为了业内解决 NLP 问题的标配。 2019年&#xff0c;谷歌…...

C语言结构体字节对齐技术详解

C语言结构体字节对齐技术详解&#xff08;第一部分&#xff09; 在C语言中&#xff0c;结构体字节对齐是一个重要的概念&#xff0c;它涉及到内存中数据的布局和访问效率。字节对齐可以帮助提高程序的性能&#xff0c;减少内存碎片&#xff0c;并确保数据的一致性和正确性。本…...

Linux编辑器——vim的使用

目录 vim的基本概念 命令模式 底行模式 插入模式 注释和取消注释 普通用户进行sudo提权 vim配置问题 vim的基本概念 一般使用的vim有三种模式&#xff1a; 命令模式 底行模式和插入模式&#xff0c;可以进行转换&#xff1b; vim filename 打开vim&#xff0c;进入的…...

wordpress 手机 登陆不了/seo引擎搜索网站

多线程里为啥要用异步编程&#xff1f;因为异步到其他线程里&#xff0c;不阻塞主线程&#xff0c;让主线程处理更多的事情。 //开启一个定时任务线程&#xff0c;挂载消费者任务。 //定时任务不就是time定时器&#xff0c;对没错。这个的区别是time运行在主线程中&#xff0c…...

为加强政协网站建设/网站源码建站

这里提供两种方法供选择&#xff1a;第一&#xff1a;手写代码。第二&#xff1a;利用HttpClient php类库第一种方法&#xff1a;$flag 0;//要post的数据$argv array(var1>abc,var2>你好吗);//构造要post的字符串foreach ($argv as $key>$value) {if ($flag!0) {$pa…...

个人备案经营网站/阿里云万网域名查询

环境 VS版本&#xff1a;VS2010 相关知识 1、SetTimer函数原型 UINT_PTR SetTimer(HWND hWnd,UINT_PTR nIDEvent,UINT uElapse,TIMERPROC lpTimerFunc ); hWnd&#xff1a;这个定时器相关联的窗口句柄。 uElapse&#xff1a;定时器超时值&#xff0c;单位毫秒…...

专业网站建设制作价格/企业邮箱格式

是否要离开&#xff0c;离开对吗&#xff1f;没见过它的反应&#xff0c;现在终于见到那种喋气的声音&#xff0c;给别人。我有什么理由留下&#xff0c;只因为曾经一起走过的路&#xff0c;如果将来的路都没了&#xff0c;曾经又有什么意义呢&#xff1f; 转载于:https://www.…...

wordpress软件网站模板下载/舆情分析报告范文

访问权限修饰符&#xff1a;private < 默认不写&#xff08;注意不要添加default修饰&#xff09;< protected < public 注意&#xff1a; private > 最小权限&#xff0c;被它修饰的成员只能够在本类中可以访问到 public > 最大权限&#xff0c;任何地方和…...

江苏网站建设seo优化/网站注册要多少钱

1、概述 如果clone方法返回一个由构造器创建的对象&#xff0c;它就得到有错误的类。因此&#xff0c;如果覆盖了非final类中的clone方法&#xff0c;则应该返回一个通过调用super.clone得到的对象。如果类的所有超类都遵循这条规则&#xff0c;那么调用super.clone最终会调用O…...