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

Golang导入导出Excel表格

最近项目开发中有涉及到Excel的导入与导出功能,特别是导出表格时需要特定的格式(单元格合并等),废话不多说,直接上代码了。

首先用到一个第三方库,实测还是很强大很好用的,就是这个https://github.com/qax-os/excelize

引用库
go get github.com/xuri/excelize/v2
导入表格
package mainimport ("encoding/json""github.com/xuri/excelize/v2""net/http""strings"
)func fileImport(w http.ResponseWriter, r *http.Request) {// 获取请求中的文件名formFile, _, err := r.FormFile("filename")if err != nil {w.Write([]byte("获取文件失败, " + err.Error()))return}// 关闭defer formFile.Close()//reader, err := excelize.OpenReader(formFile)if err != nil {w.Write([]byte("读取文件失败, " + err.Error()))return}// 关闭defer reader.Close()rows, err := reader.GetRows("Sheet1")if err != nil {w.Write([]byte("获取工作表失败, " + err.Error()))return}ret := make([]string, 0, 8)for i, row := range rows {// 每一行数据的列, 都是从0开始的, 一般0行都是表头if i == 0 {continue}value1 := row[0] // 第一列value2 := row[1] // 第二列// 去除空格value1 = strings.Trim(strings.TrimSpace(value1), "\n")value2 = strings.Trim(strings.TrimSpace(value2), "\n")//ret = append(ret, value1+","+value2)}bytes, _ := json.Marshal(ret)w.Write(bytes)return
}func main() {// HTTP服务http.HandleFunc("/fileImport", fileImport)err := http.ListenAndServe(":8192", nil)if err != nil {panic(err)}
}

表格格式
在这里插入图片描述
执行后效果
在这里插入图片描述

导出表格
package mainimport ("encoding/json""fmt""github.com/xuri/excelize/v2""net/http""strings"
)func fileExport(w http.ResponseWriter, r *http.Request) {file := excelize.NewFile()defer file.Close()// 设置页sheetName := "Sheet1"// 创建sheet, err := file.NewSheet(sheetName)if err != nil {w.Write([]byte("创建失败, " + err.Error()))return}// 设置单元格格式style := &excelize.Style{Border: nil,Fill:   excelize.Fill{},Font:   nil,Alignment: &excelize.Alignment{Horizontal:      "center",Indent:          0,JustifyLastLine: false,ReadingOrder:    0,RelativeIndent:  0,ShrinkToFit:     false,TextRotation:    0,Vertical:        "center",WrapText:        false,},Protection:    nil,NumFmt:        0,DecimalPlaces: nil,CustomNumFmt:  nil,NegRed:        false,}styleID, _ := file.NewStyle(style)// 设置表头_ = file.SetCellValue(sheetName, "A1", "款")_ = file.SetCellStyle(sheetName, "A1", "A1", styleID)_ = file.SetCellValue(sheetName, "B1", "尺码")_ = file.SetCellStyle(sheetName, "B1", "B1", styleID)// 设置值for i := 0; i < 5; i++ {lineStr := fmt.Sprintf("%d", i+2)//_ = file.SetCellValue(sheetName, "A"+lineStr, "基础款")_ = file.SetCellStyle(sheetName, "A"+lineStr, "A"+lineStr, styleID)//_ = file.SetCellValue(sheetName, "B"+lineStr, "1:2:3:4:5:6")_ = file.SetCellStyle(sheetName, "B"+lineStr, "B"+lineStr, styleID)}//file.SetActiveSheet(sheet)//buffer, err := file.WriteToBuffer()if err != nil {w.Write([]byte("导出失败, " + err.Error()))return}w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=%s", "导出文件.xlsx"))w.Header().Set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")w.Write(buffer.Bytes())
}func main() {// HTTP服务http.HandleFunc("/fileImport", fileImport)http.HandleFunc("/fileExport", fileExport)err := http.ListenAndServe(":8192", nil)if err != nil {panic(err)}
}

页面请求 http://127.0.0.1:8192/fileExport 后会直接生成xlsx文件并下载
在这里插入图片描述

合并单元格

package mainimport ("encoding/json""fmt""github.com/xuri/excelize/v2""net/http""strings"
)func fileExport(w http.ResponseWriter, r *http.Request) {file := excelize.NewFile()defer file.Close()// 设置页sheetName := "Sheet1"// 创建sheet, err := file.NewSheet(sheetName)if err != nil {w.Write([]byte("创建失败, " + err.Error()))return}// 设置单元格格式style := &excelize.Style{Border: nil, // 边框样式Fill:   excelize.Fill{},Font:   nil, // 字体样式Alignment: &excelize.Alignment{ // 位置样式Horizontal:      "center",Indent:          0,JustifyLastLine: false,ReadingOrder:    0,RelativeIndent:  0,ShrinkToFit:     false,TextRotation:    0,Vertical:        "center",WrapText:        false,},Protection:    nil,NumFmt:        0,DecimalPlaces: nil,CustomNumFmt:  nil,NegRed:        false,}styleID, _ := file.NewStyle(style)// 设置表头_ = file.MergeCell(sheetName, "A1", "A2") // 合并单元格_ = file.SetCellValue(sheetName, "A1", "款")_ = file.SetCellStyle(sheetName, "A1", "A2", styleID)_ = file.MergeCell(sheetName, "B1", "G1") // 合并单元格_ = file.SetCellValue(sheetName, "B1", "尺码")_ = file.SetCellStyle(sheetName, "B1", "G1", styleID)_ = file.SetCellValue(sheetName, "B2", "XS")_ = file.SetCellStyle(sheetName, "B2", "B2", styleID)_ = file.SetCellValue(sheetName, "C2", "S")_ = file.SetCellStyle(sheetName, "C2", "C2", styleID)_ = file.SetCellValue(sheetName, "D2", "M")_ = file.SetCellStyle(sheetName, "D2", "D2", styleID)_ = file.SetCellValue(sheetName, "E2", "L")_ = file.SetCellStyle(sheetName, "E2", "E2", styleID)_ = file.SetCellValue(sheetName, "F2", "XL")_ = file.SetCellStyle(sheetName, "F2", "F2", styleID)_ = file.SetCellValue(sheetName, "G2", "XLL")_ = file.SetCellStyle(sheetName, "G2", "G2", styleID)// 设置值for i := 0; i < 5; i++ {lineStr := fmt.Sprintf("%d", i+3)//_ = file.SetCellValue(sheetName, "A"+lineStr, "基础款")_ = file.SetCellStyle(sheetName, "A"+lineStr, "A"+lineStr, styleID)//split := strings.Split("1:2:3:4:5:6", ":")_ = file.SetCellValue(sheetName, "B"+lineStr, split[0])_ = file.SetCellStyle(sheetName, "B"+lineStr, "B"+lineStr, styleID)_ = file.SetCellValue(sheetName, "C"+lineStr, split[1])_ = file.SetCellStyle(sheetName, "C"+lineStr, "C"+lineStr, styleID)_ = file.SetCellValue(sheetName, "D"+lineStr, split[2])_ = file.SetCellStyle(sheetName, "D"+lineStr, "D"+lineStr, styleID)_ = file.SetCellValue(sheetName, "E"+lineStr, split[3])_ = file.SetCellStyle(sheetName, "E"+lineStr, "E"+lineStr, styleID)_ = file.SetCellValue(sheetName, "F"+lineStr, split[4])_ = file.SetCellStyle(sheetName, "F"+lineStr, "F"+lineStr, styleID)_ = file.SetCellValue(sheetName, "G"+lineStr, split[5])_ = file.SetCellStyle(sheetName, "G"+lineStr, "G"+lineStr, styleID)}//file.SetActiveSheet(sheet)//buffer, err := file.WriteToBuffer()if err != nil {w.Write([]byte("导出失败, " + err.Error()))return}// 设置文件名w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=%s", "导出文件.xlsx"))// 导出的文件格式 xlsx 或者 xsl// xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet// xls application/vnd.ms-excelw.Header().Set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")w.Write(buffer.Bytes())
}func main() {// HTTP服务http.HandleFunc("/fileImport", fileImport)http.HandleFunc("/fileExport", fileExport)err := http.ListenAndServe(":8192", nil)if err != nil {panic(err)}
}

页面请求 http://127.0.0.1:8192/fileExport 后会直接生成xlsx文件并下载
在这里插入图片描述

相关文章:

Golang导入导出Excel表格

最近项目开发中有涉及到Excel的导入与导出功能&#xff0c;特别是导出表格时需要特定的格式&#xff08;单元格合并等&#xff09;&#xff0c;废话不多说&#xff0c;直接上代码了。 首先用到一个第三方库&#xff0c;实测还是很强大很好用的&#xff0c;就是这个https://git…...

基于Maven的Spring Boot应用版本号获取解析

引言 在Spring Boot应用的开发和部署中&#xff0c;了解应用的版本号对于管理和监控应用至关重要。本文将深入解析一种基于Maven打包的Spring Boot应用中&#xff0c;根据不同的运行环境获取应用版本号的解决方案。在开始介绍代码之前&#xff0c;我们先来了解一下可能的文件目…...

LLM微调(二)| 微调LLAMA-2和其他开源LLM的两种简单方法

本文将介绍两种开源工具来微调LLAMA-2。 一、使用autotrain-advanced微调LLAMA-2 AutoTrain是一种无代码工具&#xff0c;用于为自然语言处理&#xff08;NLP&#xff09;任务、计算机视觉&#xff08;CV&#xff09;任务、语音任务甚至表格任务训练最先进的模型。 1&#xf…...

AVP对纵向控制ESP(Ibooster)的需求规范

目录 1. 版本记录... 3 2. 文档范围和控制... 4 2.1 目的/范围... 4 2.2 文档冲突... 4 2.3 文档授权... 4 2.4 文档更改控制... 4 3. 功能概述... 5 4. 系统架构... 6 5. 主要安全目标... 7 5.1 …...

小模型学习(1)-人脸识别

【写作背景】因为最近一直在研究大模型&#xff0c;在与客户进行交流时&#xff0c;如果要将大模型的变革性能力讲清楚&#xff0c;就一定要能将AI小模型的一些原理和效果讲清楚&#xff0c;进而形成对比。当然这不是一件简单的事情&#xff0c;一方面大模型分析问题的的本质原…...

sublime Text使用

1、增加install 命令面板 工具(tool)->控制面板(command palette) -> 输入install ->安装第一个install package controller&#xff0c;以下安装过了&#xff0c;所以没展示 2、安装json格式化工具 点击install package&#xff0c;等几秒会进入控制面板&#xff0…...

基于深度学习的yolov7植物病虫害识别及防治系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介简介YOLOv7 系统特性工作流程 二、功能三、系统四. 总结 一项目简介 # YOLOv7植物病虫害识别及防治系统介绍 简介 该系统基于深度学习技术&#xff0c;采…...

Leetcode 2963. Count the Number of Good Partitions

Leetcode 2963. Count the Number of Good Partitions 1. 解题思路2. 代码实现 题目链接&#xff1a;2963. Count the Number of Good Partitions 1. 解题思路 这一题根据题意&#xff0c;显然我们可以将其先分为 n n n个原子partition&#xff0c;确保任意两个partition之间…...

C语言动态内存经典笔试题分析

C语言动态内存经典笔试题分析 文章目录 C语言动态内存经典笔试题分析1. 题目一2. 题目二3. 题目三4. 题目四 1. 题目一 void GetMemory(char *p){p (char *)malloc(100);} void Test(void){char *str NULL;GetMemory(str);strcpy(str, "hello world");printf(str)…...

截断正态分布stats.truncnorm()X.rvs(10000)

就是在均值和方差之外&#xff0c;再指定正态分布随机数群的上下限&#xff0c;如 [ μ − 3 σ , μ 3 σ ] [\mu-3\sigma,\mu3\sigma] [μ−3σ,μ3σ] stats.truncnorm&#xff08;&#xff09;参数 X stats.truncnorm(-2, 2, locmu, scalesigma) -2 2是截断的正态分布…...

第59天:django学习(八)

事务 事务是MySQL数据库中得一个重要概念,事务的目的&#xff1a;为了保证多个SQL语句执行成功&#xff0c;执行失败&#xff0c;前后保持一致&#xff0c;保证数据安全。 开启事务的三个关键字 start transaction commit rollback 开启事务 from django.db import transaction…...

举例说明自然语言处理(NLP)技术。

本文章由AI生成&#xff01; 以下是自然语言处理&#xff08;NLP&#xff09;技术的一些例子&#xff1a; 机器翻译&#xff1a;将一种语言翻译成另一种语言的自动化过程。常见的机器翻译系统包括谷歌翻译&#xff0c;百度翻译等。 语音识别&#xff1a;将口头语言转换成文本…...

echarts地图marker自定义图标并添加点击事件

symbol如果引用https图片链接会报403&#xff0c;直接引用本地 series: [{type: scatter, // 使用散点图系列 coordinateSystem: geo, // 设置坐标系为地理坐标系 zlevel: 100,data: [{name: 上海,value: [121.48, 31.22], // 上海的经纬度坐标 symbol: image:// require(/…...

C盘瘦身,C盘清理

以下只是我的C盘清理经验~ 一.【用软件简单清理C盘】 使用一些垃圾清理软件&#xff0c;简单的初步把C盘先清理一遍。&#xff08;这种软件太多我就不推荐了……&#xff09; 二.【WPS清理大师】 因为我电脑装了WPS&#xff0c;发现右键单击C盘有个选项【释放C盘空间】&#xf…...

STM32F103

提示&#xff1a;来源正点原子&#xff0c;参考STM32F103 战舰开发指南V1.3PDF资料 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 开发环境硬件普中科技&#xff0c;接…...

Unity使用打成图集的Sprite作为模型贴图使用的问题

大家好&#xff0c;我是阿赵。   有时候用Unity引擎做项目的时候&#xff0c;会遇到这样的需求&#xff0c;美术做了一些模型或者特效&#xff0c;然后策划想在游戏运行的时候&#xff0c;读取一些游戏图标放在特效或者模型上面当做贴图使用。   这个需求实现起来很简单&am…...

el-select赋值对象是对象时,出现赋值与展示不一致问题

代码逻辑类似&#xff1a;module 是个object { "appId": "", "id": 65, "name": "" } <el-form :model"form"><el-form-item label"申请模块" ><el-select v-model"…...

在 Node-RED 中引入 ECharts 实现数据可视化

Node-RED 提供了强大的可视化工具&#xff0c;而通过引入 ECharts 图表库&#xff0c;您可以更直观地呈现和分析数据。在这篇博客中&#xff0c;我们将介绍两种在 Node-RED 中实现数据可视化的方法&#xff1a;一种是引入本地 ECharts 库&#xff0c;另一种是直接使用 CDN&…...

docker资源限制

目录 系统压力测试工具stress 1. cpu资源限制 1.1 限制CPU Share 1.2 限制CPU 核数 1.3 CPU 绑定 2. mem资源限制 3. 限制IO 二、端口转发 三、容器卷 四、部署centos7容器应用 五、docker数据存储位置 六、docker网络 容器网络分类 在使用 docker 运行容器时&…...

探索HarmonyOS_开发软件安装

随着华为推出HarmonyOS NEXT 宣布将要全面启用鸿蒙原声应用&#xff0c;不在兼容安卓应用&#xff0c; 现在开始探索鸿蒙原生应用的开发。 HarmonyOS应用开发官网 - 华为HarmonyOS打造全场景新服务 鸿蒙官网 开发软件肯定要从这里下载 第一个为微软系统(windows)&#xff0c;第…...

FastAPI ORM 封装:FastAPI 与 SQLModel 的无缝集成与快速开发

更多内容请见: 《Python Web项目集锦》 - 专栏介绍和目录 核心价值: SQLModel 是 FastAPI 作者 Tiangolo 为 Python Web 开发量身打造的"ORM 终极解决方案",它将 Pydantic 模型与 SQLAlchemy 深度融合,让开发者在编写 API 时无需在数据库模型和 API 模型之间反复…...

Simulink双矢量MPC实战:从郭磊磊论文到可运行的Matlab Function代码(调制模型预测控制详解)

Simulink双矢量MPC实战&#xff1a;从理论到代码的完整实现路径 当我在实验室第一次尝试复现郭磊磊老师那篇经典论文时&#xff0c;面对12种矢量组合和复杂的PWM生成逻辑&#xff0c;完全不知从何下手。经过三个月的反复试验和代码调试&#xff0c;终于摸清了从论文公式到可运行…...

利用快马平台与openclaw切换模型功能,快速构建待办事项应用原型

最近在尝试快速构建一个待办事项应用的原型时&#xff0c;发现InsCode(快马)平台的AI代码生成功能特别适合这种场景。通过平台内置的openclaw切换模型功能&#xff0c;可以快速比较不同AI模型生成的代码风格差异&#xff0c;大大缩短了原型开发周期。下面分享下我的实践过程&am…...

OpenClaw未来展望:Qwen3-14B与本地自动化的5个进化方向

OpenClaw未来展望&#xff1a;Qwen3-14B与本地自动化的5个进化方向 1. 从工具到伙伴&#xff1a;OpenClaw的现状与定位 去年冬天&#xff0c;当我第一次在本地MacBook上部署OpenClaw时&#xff0c;它还是个需要手动配置JSON文件才能调用本地模型的"半成品"。如今看…...

一个月突变!Linux内核大佬懵了:上个月还是“AI垃圾”,这个月AI Bug报告却突然靠谱?

整理 | 郑丽媛出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;最近在做开源项目维护的开发者&#xff0c;可能会有一种奇怪的错觉&#xff1a;Bug 似乎报告变多了&#xff0c;而且变准了——更准确地说&#xff0c;是 AI 报的 Bug&#xff0c;突然开始“靠谱了”。…...

RAGFlow知识库配置与RAG流程优化实战

1. RAGFlow知识库配置详解 第一次接触RAGFlow知识库时&#xff0c;我被它强大的文档处理能力惊艳到了。记得当时处理一批科研论文PDF&#xff0c;传统方法提取的内容总是支离破碎&#xff0c;而RAGFlow的DeepDoc解析器完美保留了文档的图表和章节结构。下面我就把踩坑后总结的配…...

GLM-4.1V-9B-Base应用场景:零售货架图像识别与SKU自动盘点方案

GLM-4.1V-9B-Base应用场景&#xff1a;零售货架图像识别与SKU自动盘点方案 1. 零售行业面临的库存管理挑战 走进任何一家超市或便利店&#xff0c;你都会看到整齐排列的商品货架。但你可能不知道的是&#xff0c;这些看似简单的货架背后隐藏着一个巨大的管理难题 - 库存盘点。…...

学习框架和推理引擎有什么区别

​​​​​​学习框架和推理引擎通常分别应用在 AI 大模型的训练和推理 &#xff08;运行&#xff09;阶段。模型的核心任务是从大量数据中学习规律&#xff0c;完成特定预测或者生成任务&#xff0c;前者即“模型训练”&#xff0c;后者即“模型运行”。在模型训练时&#xff…...

【限时解禁】Cuvil编译器v0.9.3内部架构设计图(含Python动态类型静态化映射表),仅开放72小时

第一章&#xff1a;Cuvil 编译器在 Python AI 推理中的应用Cuvil 是一款面向 AI 工作负载的轻量级领域专用编译器&#xff0c;专为优化 Python 生态中基于 PyTorch 和 ONNX 的模型推理而设计。它通过静态图重写、算子融合与硬件感知调度&#xff0c;在不修改用户代码的前提下&a…...

N_m3u8DL-CLI-SimpleG:快速下载M3U8视频的终极指南

N_m3u8DL-CLI-SimpleG&#xff1a;快速下载M3U8视频的终极指南 【免费下载链接】N_m3u8DL-CLI-SimpleG N_m3u8DL-CLIs simple GUI 项目地址: https://gitcode.com/gh_mirrors/nm3/N_m3u8DL-CLI-SimpleG N_m3u8DL-CLI-SimpleG是一个专门用于下载M3U8流媒体视频的开源工具…...