goland 读写excel
Excelize 是 Go 语言编写的一个用来操作 Office Excel 文档类库,基于 ECMA-376 Office OpenXML 标准。
可以使用它来读取、写入 XLSX 文件,相比较其他的开源类库,Excelize 支持写入原本带有图片(表)的文档,还支持向 Excel 中插入图片,并且在保存后不会丢失图表样式。
[注意事项]
使用最新版本 Excelize 要求您使用的 Go 语言为 1.15 或更高版本
一、依赖库
import ("fmt""reflect""github.com/xuri/excelize/v2"
)
核心库
"github.com/xuri/excelize/v2"
[excelize官方项目]
[excelize官方API]
二、读取和写入
(一)读取excel文件数据
函数
// 读取excel
func TestReadExcel() {// 打开文件f, err := excelize.OpenFile("Book1.xlsx")if err != nil {fmt.Println(err)return}// 捕获异常defer func() {if err := f.Close(); err != nil {fmt.Println(err)}}()// 获取工作表中指定单元格的值cell, err := f.GetCellValue("Sheet1", "A2")if err != nil {fmt.Println(err)return}fmt.Println("cell", cell)// 获取 Sheet1 上所有单元格rows, err := f.GetRows("Sheet1")if err != nil {fmt.Println(err)return}for _, row := range rows {for _, colCell := range row {fmt.Print(colCell, "\t")}fmt.Println()}
}
调用
func TestGoExcelB(t *testing.T) {GoExcel.TestReadExcel()
}
效果
(二)覆盖写入
// 覆盖写入
func TestWriterEecel(sheetName string, cell string, writerContent string) {// 实例化结构体对象f,并调用结构体方法NewFile新建文件f := excelize.NewFile()// 创建一个工作表index := f.NewSheet("Sheet1")// 设置单元格的值f.SetCellValue("Sheet1", "A2", "Hello world.")f.SetCellValue("Sheet1", "B2", 100)// 设置工作簿的默认工作表f.SetActiveSheet(index)// 根据指定路径保存文件if err := f.SaveAs("Book1.xlsx"); err != nil {fmt.Println(err)}
}
(三)追加写入
封装
/*
* @methods TestAppendExcel
* @description 追加数据
* @params fileName string 文件名
* @params activeSheet string Sheet名
* @params writerData map[string][]string{} 写入数据*/
func TestAppendExcel(fileName string, activeSheet string, writerData map[string][]string) {// 文件名// fileName := "Book1.xlsx"// 工作表// activeSheet := "Sheet1"// 打开文件f, _ := excelize.OpenFile(fileName)// Get all the rows in the Sheet1// 获取所有行的数据,按行获取rows, err := f.GetRows(activeSheet)// 行数据fmt.Printf("rows_content:%v\n", rows)// 行数fmt.Println("rows_len:", len(rows))// 捕获异常if err != nil {fmt.Println(err)return}// 获取所有列的内容 按列获取cols, err := f.GetCols(activeSheet)// 捕获异常if err != nil {fmt.Println(err)return}// 列数据fmt.Printf("cols_content:%v\n", cols)// 列数fmt.Println("cols_len:", len(cols))// 行高lineHeight, err := f.GetRowHeight(activeSheet, 1)fmt.Println("lineHeight:", lineHeight)// 捕获异常if err != nil {fmt.Println(err)return}// 行级别lineLevel, err := f.GetRowOutlineLevel(activeSheet, 2)fmt.Println("lineLevel:", lineLevel)// 捕获异常if err != nil {fmt.Println(err)return}// 遍历写入数据(遍历map元素是字符串数组)for i, arr_v := range writerData["names"] {fmt.Println("writerData['names']", arr_v)// 判断数据类型fmt.Println("writerData['names'] arr_v type:", reflect.TypeOf(arr_v))// 单元格值设置f.SetCellValue(activeSheet, fmt.Sprintf("A%d", len(rows)+1+i), fmt.Sprintf("%v", arr_v))}for i, arr_v := range writerData["address"] {fmt.Println("writerData['address']", arr_v)// 判断数据类型fmt.Println("writerData['address'] arr_v type:", reflect.TypeOf(arr_v))f.SetCellValue(activeSheet, fmt.Sprintf("B%d", len(rows)+1+i), fmt.Sprintf("%v", arr_v))}for i, arr_v := range writerData["numbers"] {fmt.Println("writerData['numbers']", arr_v)// 判断数据类型fmt.Println("writerData['numbers'] arr_v type:", reflect.TypeOf(arr_v))// 单元格值设置f.SetCellValue(activeSheet, fmt.Sprintf("C%d", len(rows)+1+i), fmt.Sprintf("%v", arr_v))fmt.Println("arr_v[i]:", arr_v)}// 单元格值设置// f.SetCellValue(activeSheet, fmt.Sprintf("A%d", len(rows)+1), fmt.Sprintf("aa%d", len(rows)+1))// 保存文件,并捕获异常if err := f.SaveAs(fileName); err != nil {fmt.Println(err)}
}
调用
func TestGoExcelC(t *testing.T) {// 声明集合map_data := map[string][]string{}// 声明数组并初始化names := []string{"张三", "李四", "王五"}fmt.Printf("names:%v\n", names)// 声明数组并初始化address := []string{"泉州市丰泽区", "厦门市集美区", "福州市金山区"}fmt.Printf("address:%v\n", address)// 声明数组并初始化numbers := []string{"2020001", "2020002", "2020003"}fmt.Printf("numbers:%v\n", numbers)map_data["names"] = namesmap_data["address"] = addressmap_data["numbers"] = numberst.Logf("map_data:%v\n", map_data) // map_data:map[address:[泉州市丰泽区 厦门市集美区 福州市金山区] names:[张三 李四 王五] numbers:[123123 234234 4534534]]// 追加写入excelGoExcel.TestAppendExcel("Book1.xlsx", "Sheet1", map_data)
}
效果 :
三 、常用方法
// 获取当前活动sheet页的索引sheet_idx := f.GetActiveSheetIndex()sheetName := f.GetSheetName(sheet_idx)// 设置单元格的值// 在excel中SetCellValue设置的值都是常规模式f.SetCellValue(sheetName, "A1", "字符串")f.SetCellValue(sheetName, "A2", 200)f.SetCellValue(sheetName, "A3", true)f.SetCellStr(sheetName, "B1", "这是SetCellStr")f.SetCellBool(sheetName, "B3", true)f.SetCellFloat(sheetName, "B2", 100.00200, 3, 64) // 第三个参数是值,必须是float64类型的,第四个是小数点的位数,第五个是32或者64,原始的数据是float32就是32,是float64就是64f.SetCellInt(sheetName, "B4", 100000) // 整数f.SetCellDefault(sheetName, "C1", "这是SetCellDefault")// 设置单个单元格的公式f.SetCellFormula(sheetName, "C2", "B2+A2")// 链接只会做链接,不会给单元格赋值,需要单独设置值和样式f.SetCellHyperLink(sheetName, "D1", "https://www.baidu.com", "External")f.SetCellValue(sheetName, "D1", "链接1External")f.SetCellHyperLink(sheetName, "D2", "Sheet1!A1", "Location")f.SetCellValue(sheetName, "D2", "链接2Location")// 插入行f.InsertRow(sheetName, 2)f.InsertCol(sheetName, "D")// 复制行f.DuplicateRow(sheetName, 3)f.DuplicateRowTo(sheetName, 1, 7)// 删除行/列f.RemoveCol(sheetName, "F")f.RemoveRow(sheetName, 7)//查找fmt.Println(f.SearchSheet(sheetName, "200", true))fmt.Println(f.SearchSheet(sheetName, "^[0-9]{1,3}$", true))// 修改sheet页的名称f.SetSheetName(sheetName, "新的名称")// go数据类型添加到excel中 其中的基础数据类型,string,int,float,bool 都可以直接通过设置指定单元格的值实现// 下面演示数组,切片以及map格式的数据写入excelvar arr = []interface{}{"姓名", "性别", "年龄", "工作",}idx := f.NewSheet("data")// 数据必须是 []interface{} 类型的err := f.SetSheetRow("data", "A1", &arr)if err != nil {fmt.Println(err)}f.SetActiveSheet(idx)// 行列索引转换为单元格索引fmt.Println(excelize.JoinCellName("A", 10))// 单元格索引拆分行、列索引fmt.Println(excelize.SplitCellName("AA10"))// 设置多个单元格的公式,相当于在excel中通过拖拉复制公式data := [][]float64{{10.5, 20.5}, {18, 28}, {100, 900}}for i, d := range data {startCell, _ := excelize.JoinCellName("A", i+2)f.SetSheetRow("data", startCell, &d)}// 定义需要设置公式的所有单元格范围f_type, ref := excelize.STCellFormulaTypeShared, "C2:C4"// 相当于设置计算公式的模板if err := f.SetCellFormula("data", "C2", "=SUM(A2:B2)", excelize.FormulaOpts{Type: &f_type, Ref: &ref}); err != nil {fmt.Println(err)}// 合并单元格if err := f.MergeCell("data", "D1", "G6"); err != nil {fmt.Println(err)}mergedCells, err := f.GetMergeCells("data")if err != nil {fmt.Println(err)}// 获取合并单元格的值以及合并单元格的起止位置for _, cell := range mergedCells {fmt.Println(cell.GetStartAxis())fmt.Println(cell.GetEndAxis())fmt.Println(cell.GetCellValue())}v, err := f.GetCellValue("data", "F3")if err != nil {fmt.Println(err)}fmt.Println("合并单元格中的数据值是:", v)
goland 读写excel相关推荐
- NPOI读写Excel
1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet:行:Row:单元格Cell. 2.NPOI是POI的C#版本,NPOI的行和列的index都是从0开始 ...
- .NET读写Excel工具Spire.Xls使用(1)入门介绍
原文:[原创].NET读写Excel工具Spire.Xls使用(1)入门介绍 在.NET平台,操作Excel文件是一个非常常用的需求,目前比较常规的方法有以下几种: 1.Office Com组件的方式 ...
- 数据分析从零开始实战,Pandas读写Excel/XML数据
点击查看第一篇文章: 数据分析从零开始实战,Pandas读取HTML页面+数据处理解析_ 数据分析 从零开始到实战,Pandas读写CSV数据_ 数据分析 从零开始到实战,Pandas读写CSV数据 ...
- php如何读写excel
php如何读写excel 一.总结 一句话总结:PHP操作Excel最好的方法是使用PHPExcel类, 可以到官网下载PHPExcel类库 http://phpexcel.codeplex.com ...
- python怎么读excelsheet_python3 excle(python怎么读写excel文件)
python读取已经打开的3个word和excle文件的路径 用 win32com 操控 word和Excel就可以实现 咋样把python写入excle中 # 需安装 xlrd-0.9.2 和 xl ...
- python读写excel数据--pandas
文章目录 1读写excel数据 1.1 读: 1.1 写: 2举例 2.1 要求 2.2 实现 1读写excel数据 利用pandas可以很方便的读写excel数据 1.1 读: data_in = ...
- 解决读写Excel的第三方类库as3xls无法读取中文和写入中文的问题
原文 http://blog.csdn.net/pizzaman/article/details/5700954 最近做地图编辑器需要用As3读写Excel,找到了as3xls但存在诸多问题,1.无法 ...
- c# poi写入e_C# 使用 NPOI 库读写 Excel 文件(转载)
NPOI 是开源的 POI 项目的.NET版,可以用来读写Excel,Word,PPT文件.在处理Excel文件上,NPOI 可以同时兼 容xls 和 xlsx.官网提供了一份Examples,给出了 ...
- python读取数据文件-python多种读写excel等数据文件的方式(收藏篇)
前言: python处理数据文件的途径有很多种,可以操作的文件类型主要包括文本文件(csv.txt.json等).excel文件.数据库文件.api等其他数据文件.下面小编整理下python到底有哪些 ...
最新文章
- Python OpenCV分水岭算法分割和提取重叠或有衔接的图像中的对象
- 各浏览器中for in顺序的差异
- Bitcoin0.21版 公链开发(5) PHP集成到Apache中(windows平台)
- css div漂浮向下,DIV+CSS固定底部的漂浮广告
- Apache Flink新场景——OLAP引擎
- [VMM 2008虚拟化之初体验-1] 准备环境
- 【博客大赛】100行js代码实现网站在线用户数量统计 nodejs + socket.io方案
- 最大比例(压轴题 )
- java根据微信小程序code获取用户openId
- Win11如何给系统盘瘦身?Win11系统盘瘦身方法
- Python打印指定日期的日历
- 微信小程序 实现提示弹窗
- Data Analysis - Day7 - Pandas
- OSChina 周日乱弹 ——请世界不要对好人太薄情
- jupyter查看python包
- 解决mplfinance绘制箱体图一字涨停k线颜色错误的情况
- 机器学习笔记---从极大似然估计的角度看待Logistic回归
- EXCEL密码破解/破解工作表保护密码(详细图文教程)
- 恒大健康:自称股东的FF员工提起集体诉讼 无理控告我们
- chrome浏览器,谷歌浏览器卡顿解决方法
热门文章
- OA系统行业解析:中小企业实施OA系统的意义
- AD域控器限制U盘和存储设备
- 接口请求方式及GET和POST的区别
- 【暗黑者】暗黑者里darker是谁?揭秘下罗飞和darker的关系
- jenkins远程构建job_JENKINS触发远程构建功能使用
- 树莓派---设置WIFI自动连接或者取消自动连接
- matlab高级编程 苏金明,MATLAB高级编程
- 文件系统I/O缓冲-Linux
- mac移动硬盘安装linux系统安装教程,yong移动硬盘安装Linux的最新方法
- 通过IF({1,0}和VLOOKUP函数实现Excel的双条件多条件查找