xuri/excelize简单使用

news2024/11/13 9:20:20

main.go文件: 

package main

import (
	"fmt"
	"github.com/xuri/excelize/v2"
)

func main() {
	read() // 读excel文件
	//write()        // 写excel文件
	//readAndWrite() // 读写excel文件
}

func read() {
	f, err := excelize.OpenFile("read.xlsx")
	if err != nil {
		fmt.Println("excelize.OpenFile err: ", err)
		return
	}

	defer func() {
		if err := f.Close(); err != nil {
			fmt.Println("excelize.CloseFile err: ", err)
		}
	}()

	sheet := "Sheet1"
	rows, err := f.GetRows(sheet)
	if err != nil {
		fmt.Println("f.GetRows err: ", err)
		return
	}

	// 获取某一单元格
	a1, err := f.GetCellValue(sheet, "A1")
	fmt.Printf("A1:%s,err:%v\n", a1, err)

	fmt.Println()

	// 遍历所有行列
	for i, row := range rows {
		if len(row) <= 1 {
			break
		}
		fmt.Printf("%d\t%s\t%s\t%s\n", i, row[0], row[1], row[2])
	}

	fmt.Println()

	// 遍历所有行列
	for i, row := range rows {
		for j, cell := range row {
			fmt.Printf("rows[%d][%d]=%s\t", i, j, cell)
		}
		fmt.Println()
	}
}

func write() {
	f := excelize.NewFile()

	defer func() {
		if err := f.Close(); err != nil {
			fmt.Println("excelize.CloseFile err: ", err)
		}
	}()

	sheet1 := "Sheet1"
	sheet2 := "Sheet2"
	index, err := f.NewSheet(sheet2)
	if err != nil {
		fmt.Println("f.NewSheet err: ", err)
		return
	}

	f.SetCellValue(sheet1, "A1", "a")
	f.SetCellValue(sheet1, "B2", "b")
	f.SetCellValue(sheet1, "C3", "c")

	f.SetCellValue(sheet2, "A3", "a")
	f.SetCellValue(sheet2, "B2", "b")
	f.SetCellValue(sheet2, "C1", "c")

	f.SetActiveSheet(index)

	if err := f.SaveAs("write.xlsx"); err != nil {
		fmt.Println("excelize.SaveAs err: ", err)
	}
}

func readAndWrite() {
	f, err := excelize.OpenFile("read_and_write.xlsx")
	if err != nil {
		fmt.Println("excelize.OpenFile err: ", err)
		return
	}

	defer func() {
		if err := f.Close(); err != nil {
			fmt.Println("excelize.CloseFile err: ", err)
		}
	}()

	sheet := "Sheet1"
	rows, err := f.GetRows(sheet)
	if err != nil {
		fmt.Println("f.GetRows err: ", err)
		return
	}

	// 遍历所有行列
	for _, row := range rows {
		if len(row) <= 1 {
			break
		}
		fmt.Println(row)
	}

	// 添加数据
	f.SetCellValue(sheet, "D1", "备注")
	f.SetCellValue(sheet, "D2", "test")

	if err = f.Save(); err != nil {
		fmt.Println("excelize.SaveAs err: ", err)
	}
}

go.mod文件:

module excel-demo

go 1.23.0

require (
	github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
	github.com/richardlehane/mscfb v1.0.4 // indirect
	github.com/richardlehane/msoleps v1.0.3 // indirect
	github.com/xuri/efp v0.0.0-20231025114914-d1ff6096ae53 // indirect
	github.com/xuri/excelize/v2 v2.8.1 // indirect
	github.com/xuri/nfp v0.0.0-20230919160717-d98342af3f05 // indirect
	golang.org/x/crypto v0.19.0 // indirect
	golang.org/x/net v0.21.0 // indirect
	golang.org/x/text v0.14.0 // indirect
)

excel效果如下:

1、read.xlsx文件

2、write.xlsx文件

3、read_and_write.xlsx文件

详见:excelize package - github.com/xuri/excelize/v2 - Go Packages

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

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

相关文章

初写MySQL四张表:(2/4)

今天&#xff0c;我们来写第二张表。因着这四张表以及后续有相应的拓展&#xff0c;这四张环环相扣&#xff0c;所以还未写出第一张表的同学&#xff0c;可以看完第一张表&#xff0c;再来此处&#xff1a; 初写MySQL四张表:(1/4)-CSDN博客 好&#xff0c;今日表格有三张&…

echarts图表一次点击事件却触发多次的解决方法

echarts图表 一次点击事件却触发多次的解决方法 遇到个echarts的问题&#xff0c;点击一次图表却触发多次点击事件&#xff0c;看了下官网介绍了点击事件的解绑事件 let echarts_id document.getElementById("echarts_id");let my_chart this.$echarts.init(echart…

八股文-JVM

是什么&#xff1f;有什么用&#xff1f;谁发明的&#xff1f;什么时候发明的&#xff1f; Java虚拟机&#xff0c;用来运行Java程序&#xff0c;有很多个版本的虚拟机&#xff0c;比如HotSpot&#xff0c;最开始是SUN公司开发人员&#xff0c;和Java一起发布&#xff0c;现在…

VirtualBox增加磁盘并给docker用

在VirtualBox新增磁盘 在虚拟机停止的情况下依次选择&#xff0c;然后创建新磁盘 虚拟机新磁盘创建分区、格式化、挂载分区 开机自动挂载新磁盘分区/dev/sdb1&#xff1a; nano /etc/fstab末尾添加一行&#xff1a; /dev/sdb1 /disk02 e…

leetcode41. 缺失的第一个正数,原地哈希表

leetcode41. 缺失的第一个正数 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,0] 输出&#xff1a;3 解释&#xf…

基于JavaSwing实现的酒店管理系统

一、项目介绍 > 欢迎使用酒店管理系统&#xff01; > 这是一个基于Java Swing开发&#xff0c;用于管理酒店预订、房间、订单和用户信息的系统。 > 适用于JAVA初学者作为入门学习项目。 二、项目演示 三、基础依赖 技术/框架版本描述Java8编程语言MySQL8.0数据…

ATGM331C-5T杭州中科微全星座定位授时模块电气参数

ATGM331C-5T 系列模块通过 UART 作为主要输出通道&#xff0c;按照 NMEA0183 的协议格式输出。 产品选型&#xff1a; 性能指标&#xff1a; 出色的定位导航功能&#xff0c;支持 BDS/GPS 卫星导航系统的单系统授时&#xff0c;以及任意组合的多系统联合定位&#xff0c;并支持…

yolov5/8/9/10模型在VOC数据集上的应用【代码+数据集+python环境+GUI系统】

yolov5/8/9/10模型在VOC数据集上的应用【代码数据集python环境GUI系统】 1.背景意义 VOC数据集被广泛应用于计算机视觉领域的研究和实验中&#xff0c;特别是目标检测和图像识别任务。许多知名的目标检测算法都使用VOC数据集进行训练和测试。VOC挑战赛&#xff08;VOC Challeng…

倍增练习(1)

A - ST 表 && RMQ 问题 题目思路:st表的板子题用于静态区间求最值,通过倍增的思想,先通过预处理将各个区间的最大值通过转移式求出f[i][j] max(f[i][j - 1], f[i (1 << (j - 1))][j - 1]);然后再进行重叠查询查询,k log2(r - l 1);,max(f[l][k], f[r - (1 &l…

js中两种异步方式:async+await以及then

第一种方式 第二种方式 完整代码 前端代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>pywebv…

金手指设计

"MCP6294"。是一个轨到轨, 带宽为 10MHz 的 低功耗放大器. 对LM358测量 10MHz 范围内的频率特性&#xff0c;在 8MHz 左右&#xff0c;输出相移超过了 180。MCP6294的频率特性&#xff0c;则显示在 10MHz 运放相移之后 100左右。 对比两个运放的频率特性&#xff…

LLM - 理解 多模态大语言模型(MLLM) 的 预训练(Pre-training) 与相关技术 (三)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142167709 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 完备(F…

深入 mysql,掌握一对一、一对多、多对多表设计、查询及级联操作

数据库表的基本概念与关系 数据库通常包含多个表&#xff0c;每个表存储特定类型的信息。例如&#xff1a; 学生表&#xff1a;存储学生信息。老师表&#xff1a;存储老师信息。班级表&#xff1a;存储班级信息。 这些表通过各种关系连接&#xff0c;形成一个结构化的数据管…

vscode关闭git的提交提示

问题描述&#xff1a; vscode中光标停留在每一行都会有出现git仓库的提交信息&#xff0c;影响代码阅读。 解决方法&#xff1a; 左下角设置齿轮&#xff1a; 输入关键词commit input 取消勾选&#xff0c;即可解决。

判断n是否为两素数相乘

要求 请编写函数fun&#xff0c;其功能是:验证参数n是否可以分解成2个素数相乘&#xff0c;是则返回1&#xff0c;否则返回0&#xff0c;并通过指针变更x、y返回分解后的2个素数值&#xff0c;要求*x<*y。主程序中将打印出分解结果。 例如:1113*37&#xff0c;当函数fun的参…

Web APIs 第二天

第二天&#xff1a;DOM事件基础&#xff0c;注册事件&#xff0c;tab栏切换 添加事件监听 <body><button>点击</button><script>const btn document.querySelector(button)btn.addEventListener(click, function () {alert(嗲你)})</script> …

数据结构-3.3.栈的链式存储实现

一.链栈的定义&#xff1a; 二.总结&#xff1a;

Net8 调用BarTender2022 R8

先上效果图 官方只能支持.net framework&#xff0c;不支持.netCore 参考链接 https://support.seagullscientific.com/hc/en-us/community/posts/14770890037911-Support-for-NET-6 https://support.seagullscientific.com/hc/en-us/community/posts/360046932953-Make-SDK…

Web开发:ABP框架2——入门级别的增删改查Demo

目录 一、前言 二、上节回顾 ​编辑 三、新建Dto和添加映射 1.新建dto 2.添加映射规则 四、新建WebApi控制器用EFcore进行增删改查 1.新建Webapi控制器接口 2.新建Webapi控制器实现 3.跑项目测试 五、WebApi控制器调用底层代码 1.webapi控制器&#xff08;高层代码&…

JZ2440开发板——S3C2440的存储控制器

以下内容源于韦东山课程的学习与整理&#xff0c;如有侵权请告知删除。 课程中说的“内存控制器”&#xff0c;准确来说是“存储控制器”&#xff0c;其配套书籍写的也是“存储控制器”。 另外“Nor Flash控制器”&#xff0c;说的也是“存储控制器”&#xff0c;或者“存储控…