0

0

Go 语言中读取 Excel 文件指南

霞舞

霞舞

发布时间:2025-10-09 12:04:08

|

838人浏览过

|

来源于php中文网

原创

Go 语言中读取 Excel 文件指南

本教程将详细介绍如何在 Go 语言中高效地读取 Excel 文件。我们将利用流行的 github.com/tealeg/xlsx 包,从安装到实现完整的读取逻辑,包括打开文件、遍历工作表、行和单元格,并提取数据,旨在帮助开发者轻松处理 Excel 数据。

1. 简介与库选择

go 语言中处理 excel 文件,通常需要借助第三方库。github.com/tealeg/xlsx 是一个功能强大且广泛使用的库,它提供了读取和写入 .xlsx 格式 excel 文件的能力。该库封装了底层的文件解析逻辑,使得开发者能够以结构化的方式访问 excel 文件中的数据,如工作表、行和单元格。

2. 安装 xlsx 包

在使用 xlsx 包之前,需要将其安装到 Go 项目中。打开终端或命令行工具,执行以下 go get 命令:

go get -v github.com/tealeg/xlsx

此命令会自动下载 xlsx 包及其所有依赖项,并将其安装到 Go 模块缓存中,以便在项目中引用。

3. 读取 Excel 文件的基本流程

使用 xlsx 包读取 Excel 文件的基本步骤包括:

  1. 导入必要的包:引入 xlsx 包以及标准库中的 fmt 和 log 包用于输出和错误处理。
  2. 打开 Excel 文件:使用 xlsx.OpenFile() 函数打开指定的 .xlsx 文件。
  3. 遍历工作表:Excel 文件可以包含多个工作表(Sheet),需要遍历这些工作表来访问其内容。
  4. 遍历行:在每个工作表中,数据以行的形式组织,需要逐行遍历。
  5. 遍历单元格:在每行中,数据存储在单元格(Cell)中,需要逐个访问单元格以提取其值。
  6. 提取单元格值:单元格的值可以通过其提供的方法(如 String())转换为字符串或其他类型。

4. 示例代码:读取 Excel 文件内容

以下是一个完整的 Go 语言程序示例,演示了如何打开一个 Excel 文件,并打印出其中所有工作表、行和单元格的内容。

首先,请确保在运行此代码之前,在程序同一目录下创建一个名为 example.xlsx 的 Excel 文件,并填充一些数据,例如:

ChatGPT Website Builder
ChatGPT Website Builder

ChatGPT网站生成器,AI对话快速生成网站

下载

example.xlsx 内容示例:

Sheet1: | 姓名 | 年龄 | 城市 | | :--- | :--- | :--- | | 张三 | 30 | 北京 | | 李四 | 25 | 上海 |

Sheet2: | 产品 | 价格 | 数量 | | :--- | :--- | :--- | | 铅笔 | 2.5 | 100 | | 笔记本 | 15.0 | 50 |

Go 程序代码:

package main

import (
    "fmt"
    "log"

    "github.com/tealeg/xlsx" // 导入 xlsx 包
)

func main() {
    // 指定要读取的 Excel 文件路径
    // 确保此文件存在于与Go程序相同的目录下或提供完整路径
    filePath := "example.xlsx" 

    // 1. 打开 Excel 文件
    // xlsx.OpenFile 返回一个 *File 对象和可能的错误
    xlFile, err := xlsx.OpenFile(filePath)
    if err != nil {
        // 如果打开文件失败,使用 log.Fatalf 打印错误并退出程序
        log.Fatalf("打开Excel文件失败: %v", err)
    }

    fmt.Printf("成功打开文件: %s\n\n", filePath)

    // 2. 遍历文件中的所有工作表
    // xlFile.Sheets 是一个 *Sheet 类型的切片
    for _, sheet := range xlFile.Sheets {
        fmt.Printf("--- 工作表: %s ---\n", sheet.Name)

        // 3. 遍历当前工作表中的所有行
        // sheet.Rows 是一个 *Row 类型的切片
        for rowIndex, row := range sheet.Rows {
            // 过滤掉可能存在的空行(如果需要)
            if row == nil {
                continue
            }

            // 打印当前行号(rowIndex 从 0 开始,所以加 1)
            fmt.Printf("  行 %d: ", rowIndex+1)

            // 4. 遍历当前行中的所有单元格
            // row.Cells 是一个 *Cell 类型的切片
            for colIndex, cell := range row.Cells {
                // 5. 获取单元格的字符串值
                // cell.String() 方法返回单元格内容的字符串表示
                text := cell.String()
                fmt.Printf("列 %d: %s | ", colIndex+1, text)
            }
            fmt.Println() // 每一行结束后换行
        }
        fmt.Println() // 每个工作表结束后空一行,提高可读性
    }
}

运行结果示例:

成功打开文件: example.xlsx

--- 工作表: Sheet1 ---
  行 1: 列 1: 姓名 | 列 2: 年龄 | 列 3: 城市 | 
  行 2: 列 1: 张三 | 列 2: 30 | 列 3: 北京 | 
  行 3: 列 1: 李四 | 列 2: 25 | 列 3: 上海 | 

--- 工作表: Sheet2 ---
  行 1: 列 1: 产品 | 列 2: 价格 | 列 3: 数量 | 
  行 2: 列 1: 铅笔 | 列 2: 2.5 | 列 3: 100 | 
  行 3: 列 1: 笔记本 | 列 2: 15 | 列 3: 50 | 

5. 注意事项与最佳实践

  • 错误处理:在打开文件、读取数据等操作中,务必进行错误处理。xlsx 包的许多函数都会返回 error,及时检查并处理这些错误是保证程序健壮性的关键。
  • 单元格数据类型:cell.String() 方法会将单元格内容统一转换为字符串。如果需要处理数字、日期等特定类型的数据,可能需要根据业务逻辑进行额外的类型转换。xlsx 包也提供了 cell.Float()、cell.Int() 等方法来尝试获取特定类型的值。
  • 大型文件处理:对于非常大的 Excel 文件,一次性加载所有数据可能会消耗大量内存。xlsx 包默认会将整个文件加载到内存中。如果遇到内存问题,可以考虑分块读取或寻找支持流式读取的库(尽管 xlsx 在一般情况下已足够高效)。
  • 文件路径:确保提供的 Excel 文件路径是正确的。可以是相对路径(相对于程序执行目录)或绝对路径。
  • 性能优化:在处理大量数据时,避免在循环内部进行不必要的计算或 I/O 操作。提前规划好数据结构,一次性读取所需数据,然后进行处理。

6. 总结

通过 github.com/tealeg/xlsx 包,Go 语言开发者可以方便高效地读取 Excel 文件中的数据。本教程从包的安装开始,详细介绍了打开文件、遍历工作表、行和单元格的完整流程,并提供了一个实用的代码示例。遵循本教程的指导和最佳实践,您将能够轻松地在 Go 应用程序中集成 Excel 文件处理功能。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

310

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

222

2025.10.31

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

483

2023.08.02

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

580

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

102

2025.10.23

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

228

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

297

2023.10.25

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.08.03

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

14

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 14.5万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号