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

5分钟精通Excel在go中的使用

一些简单操作可以在官方文档中找到,应该足够无经验的朋友们入门

介绍 - 《Excelize v2.2 中文文档》 - 书栈网 · BookStack

这里贴一个中文版的链接(以excelize库为例,相对其他库来说,体验很不错),不过要注意该库是不支持.xls文件的,最好将要处理的文件从.xls复制到.xlsx中再进行处理。

具体说一下go操作excel的逻辑过程(有使用excel的基础会更好理解)

以简单的demo为例:

package main

import (
    "fmt"
    "log"

    "github.com/xuri/excelize/v2"
)

func main() {
    // 创建一个新的 Excel 文件
    f := excelize.NewFile()
    
    // 定义工作表名
    sheetName := "活动信息"
    
    // 创建一个工作表
    if _, err := f.NewSheet(sheetName); err != nil {
        log.Fatal("Error creating new sheet:", err)
    }

    // 定义标题行
    headers := []string{"活动主题", "活动负责人", "联系电话", "开始时间", "结束时间"}
    
    // 添加标题行到工作表
    for colIndex, header := range headers {
        cell, err := excelize.CoordinatesToCellName(colIndex+1, 1) // 第一行
        if err != nil {
            log.Fatal("Error generating cell name:", err)
        }
        if err := f.SetCellValue(sheetName, cell, header); err != nil {
            log.Fatal("Error setting header data:", err)
        }
    }

    // 填充活动数据
    activities := [][]string{
        {"志愿者活动", "张三", "123456789", "2024-01-01 10:00", "2024-01-01 12:00"},
        {"社区服务", "李四", "987654321", "2024-01-02 09:00", "2024-01-02 11:00"},
    }

    for rowIndex, activity := range activities {
        for colIndex, value := range activity {
            cell, err := excelize.CoordinatesToCellName(colIndex+1, rowIndex+2) // 从第二行开始
            if err != nil {
                log.Fatal("Error generating cell name:", err)
            }
            if err := f.SetCellValue(sheetName, cell, value); err != nil {
                log.Fatal("Error setting activity data:", err)
            }
        }
    }

    // 定义输出路径
    outputPath := "./活动信息.xlsx"
    
    // 保存文件
    if err := f.SaveAs(outputPath); err != nil {
        log.Fatal("Error saving Excel file:", err)
    }

    fmt.Println("Excel 文件已成功创建!路径:", outputPath)
}

包含了最基础的文件创建和写入功能,需要注意的是excel并不是只有文件名,一个excel中是包含了很多张工作表的,所以在创建和之后写入数据时,都要指定插入哪个工作表。上边的代码运行后,打开生成的文件:

image-20240925163632114

这时候可能一些小白会认为代码错误了,其实不然,只是代码中的工作表和默认表不是同一个:image-20240925163716356

第二张表才是真正生成的数据

image-20240925163737063

第一次很容易犯这个错误。

Excelize中插入图片的函数,

f.AddPicture(sheetName, cell, imagePath, &excelize.GraphicOptions{
    AutoFit:         true,
    Positioning:     "oneCell",
    LockAspectRatio: true, // 锁定宽高比
    ...
});err != nil {
				return err
			}

sheetName是工作表名

cell是要插入的图片位置

imagePath需要写图片的路径

需要注意一点:图片直接改后缀,比如从png改为jpg,然后让该函数去识别,会报错:image: unknown format,所以我们需要在import中添加三个包:

_ "image/gif"
_ "image/jpeg"
_ "image/png"

易错点大概就这些了。总结来说的go操作excel不是很难,易上手,在开发中可以将数据拉取后放到数据库中进行存储,也可以将数据库中数据进行处理后存到excel中。


http://www.kler.cn/news/328904.html

相关文章:

  • 7--苍穹外卖-SpringBoot项目中套餐管理 详解(一)
  • QT中的按钮控件和comboBox控件和spinBox控件无法点击的bug
  • 发布-订阅模式演示示例
  • 神点SAAS云财务系统/多账套/前后端全开源
  • 【PostgreSQL】入门篇——索引:提高查询性能的利器
  • 【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,1-1
  • 论React Native 和 UniApp 的区别
  • 【CTF Web】Pikachu 反射型xss(get) Writeup(反射型XSS+GET请求)
  • 代码随想录Day 59|图论Part09,dijkstra(堆优化版)精讲、Bellman_ford算法精讲
  • 继承实现单例模式的探索(一)
  • 已解决:“ModuleNotFoundError:No module named apex”
  • Vue3+Antv X6流程图基本使用
  • 蓝桥杯【物联网】零基础到国奖之路:十六. 扩展模块之矩阵按键
  • 智能工厂的设计软件 三部曲-表征模式mode(大纲图轮廓图和草图)之1 “草图”--基类基元:“概念对子Pair
  • [leetcode]300_最长递增子序列
  • HTTP Status 404 - /brand-demo/selectAllServlet错误解决原因-Servlet/JavaWeb/IDEA
  • Spring异常处理-@ExceptionHandler-@ControllerAdvice-全局异常处理
  • ue4多个面重叠闪烁
  • ubuntu18.04 Anconda安装及使用
  • 【网络安全】-访问控制-burp(1~6)
  • 在idea使用nacos微服务
  • LeetCode[中等] 45. 跳跃游戏 II
  • 排序算法的理解
  • 【ChatGPT】Python 实现计算两线段的变换矩阵
  • 解决Windows远程桌面 “为安全考虑,已锁定该用户账户,原因是登录尝试或密码更改尝试过多,请稍后片刻再重试,或与系统管理员或技术支持联系“问题
  • 师生健康监测系统:SpringBoot技术实践
  • Master PDF Editor 下载及详细安装教程
  • Codeforces Round 976 (Div. 2 ABCDE题)视频讲解
  • Django一分钟:使用prefetch_related避免陷入大量的查询中导致严重的性能问题
  • WebGL深究:动画与交互 —— 赋予虚拟世界生命与灵魂