当前位置: 首页 > 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)
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • PlantUML-UML 绘图工具安装、Graphviz安装、本地使用/在线使用、语法、图示案例
  • 源码分析SpringCloud Gateway如何加载断言(predicates)与过滤器(filters)
  • Java毕业设计 基于SpringBoot的景区行李寄存管理系统
  • 【Django】网上蛋糕商城后台-类目管理
  • huawei USG6001v1学习---信息安全概念
  • 前端使用webSocket与后台建立连接并进行心跳监测机制
  • AWS基础知识
  • 专业PDF编辑工具:Acrobat Pro DC 2024.002.20933绿色版,提升你的工作效率!
  • WPF/C#:实现导航功能
  • 【go】Excelize处理excel表 带合并单元格、自动换行与固定列宽的文件导出
  • JCR一区级 | Matlab实现PSO-Transformer-LSTM多变量回归预测
  • PWM再理解(1)
  • 【Node.js】初识 Node.js
  • CentOS 8中 更新或下载时报错:为仓库 ‘appstream‘ 下载元数据失败 : Cannot prepare internal mirrorlist
  • 彻底解决idea的编解码问题
  • Angular2开发踩坑系列-生产环境编译
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • js继承的实现方法
  • Python_OOP
  • SpringCloud集成分布式事务LCN (一)
  • 浮动相关
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 实现菜单下拉伸展折叠效果demo
  • 算法-图和图算法
  • 微信小程序设置上一页数据
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 智能合约Solidity教程-事件和日志(一)
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • 湖北分布式智能数据采集方法有哪些?
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #pragma 指令
  • (BFS)hdoj2377-Bus Pass
  • (HAL库版)freeRTOS移植STMF103
  • (阿里云万网)-域名注册购买实名流程
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (第一天)包装对象、作用域、创建对象
  • (剑指Offer)面试题34:丑数
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (转)fock函数详解
  • (转)Sublime Text3配置Lua运行环境
  • (轉貼) UML中文FAQ (OO) (UML)
  • .“空心村”成因分析及解决对策122344
  • .Net IOC框架入门之一 Unity
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 通过系统影子账户实现权限维持
  • .NET与 java通用的3DES加密解密方法
  • //解决validator验证插件多个name相同只验证第一的问题
  • /dev/sda2 is mounted; will not make a filesystem here!
  • /proc/stat文件详解(翻译)
  • @DataRedisTest测试redis从未如此丝滑
  • @selector(..)警告提示
  • @Transient注解
  • @Value获取值和@ConfigurationProperties获取值用法及比较(springboot)
  • [ NOI 2001 ] 食物链
  • [04] Android逐帧动画(一)