Bootstrap

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中。

;