当前位置: 首页 > 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;第…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...