0

0

如何在 Go 中使用 xlsx 库获取 Excel 表格中最后一个非空行的行号

花韻仙語

花韻仙語

发布时间:2026-01-24 10:04:02

|

338人浏览过

|

来源于php中文网

原创

如何在 Go 中使用 xlsx 库获取 Excel 表格中最后一个非空行的行号

本文介绍如何利用 go 语言的 `tealeg/xlsx` 库遍历 excel 工作表,动态识别并返回最后一个含有非空单元格的行索引(即“最后填充行”),适用于数据导入、自动化处理等场景。

在使用 Go 处理 Excel 文件时,常需定位有效数据的边界——尤其是最后一行实际有内容的行(last filled row)。tealeg/xlsx 是一个成熟稳定的纯 Go 实现 Excel(.xlsx)读写库,虽不提供内置的 GetLastRow() 方法,但可通过遍历逻辑高效实现该功能。

核心思路是:逐行扫描每个工作表(Sheet)的所有行与单元格,只要某一行中存在至少一个非空单元格,就更新当前最大行索引。注意:range sheet.Rows 返回的索引 r 是从 0 开始的(对应 Excel 中第 1 行),因此最终结果需 +1 才为用户习惯的“行号”。以下是完整、健壮的示例代码:

package main

import (
    "fmt"
    "log"
    "github.com/tealeg/xlsx"
)

func getLastFilledRow(xlFile *xlsx.File) map[string]int {
    lastRows := make(map[string]int)
    for _, sheet := range xlFile.Sheets {
        rmax := -1 // 初始化为 -1,便于区分全空表
        for r, row := range sheet.Rows {
            hasContent := false
            for _, cell := range row.Cells {
                if cell != nil && cell.String() != "" {
                    hasContent = true
                    break // 当前行已确认非空,无需检查其余单元格
                }
            }
            if hasContent {
                rmax = r
            }
        }
        // rmax 为 0-based 索引;若需 Excel 行号(1-based),则 rmax + 1
        lastRows[sheet.Name] = rmax + 1
    }
    return lastRows
}

func main() {
    xlFile, err := xlsx.OpenFile("data.xlsx")
    if err != nil {
        log.Fatal(err)
    }
    defer xlFile.Close()

    lastRows := getLastFilledRow(xlFile)
    for sheetName, rowNum := range lastRows {
        fmt.Printf("Sheet '%s': last filled row = %d\n", sheetName, rowNum)
    }
}

关键注意事项

Trickle AI
Trickle AI

多功能零代码AI应用开发平台

下载
  • row.Cells 可能包含 nil 单元格(尤其跨列稀疏数据),务必先判空再调用 .String(),避免 panic;
  • 若整张表为空,rmax 保持 -1,返回 0(即 rmax + 1),可据此做空表校验;
  • 此方法按物理行顺序扫描,保证准确性,不受 Excel “已使用区域”(UsedRange)API 误判影响;
  • 性能友好:每行一旦发现非空单元格即短路跳出内层循环,避免冗余遍历。

总结:通过合理利用 range 的索引和 cell.String() 的内容判断,即可在 tealeg/xlsx 中稳定、高效地获取最后一行有效数据的位置。该方案简洁、可移植,是 Excel 数据预处理的基础能力之一。

相关专题

更多
string转int
string转int

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

358

2023.08.02

PHP 命令行脚本与自动化任务开发
PHP 命令行脚本与自动化任务开发

本专题系统讲解 PHP 在命令行环境(CLI)下的开发与应用,内容涵盖 PHP CLI 基础、参数解析、文件与目录操作、日志输出、异常处理,以及与 Linux 定时任务(Cron)的结合使用。通过实战示例,帮助开发者掌握使用 PHP 构建 自动化脚本、批处理工具与后台任务程序 的能力。

32

2025.12.13

excel对比两列数据异同
excel对比两列数据异同

Excel作为数据的小型载体,在日常工作中经常会遇到需要核对两列数据的情况,本专题为大家提供excel对比两列数据异同相关的文章,大家可以免费体验。

1393

2023.07.25

excel重复项筛选标色
excel重复项筛选标色

excel的重复项筛选标色功能使我们能够快速找到和处理数据中的重复值。本专题为大家提供excel重复项筛选标色的相关的文章、下载、课程内容,供大家免费下载体验。

405

2023.07.31

excel复制表格怎么复制出来和原来一样大
excel复制表格怎么复制出来和原来一样大

本专题为大家带来excel复制表格怎么复制出来和原来一样大相关文章,帮助大家解决问题。

562

2023.08.02

excel表格斜线一分为二
excel表格斜线一分为二

在Excel表格中,我们可以使用斜线将单元格一分为二。本专题为大家带来excel表格斜线一分为二怎么弄的相关文章,希望可以帮到大家。

1243

2023.08.02

excel斜线表头一分为二
excel斜线表头一分为二

excel斜线表头一分为二的方法有使用合并单元格功能方法、使用文本框功能方法、使用自定义格式方法。本专题为大家提供excel斜线表头一分为二相关的各种文章、以及下载和课程。

367

2023.08.02

绝对引用的输入方法
绝对引用的输入方法

绝对引用允许在公式中引用一个固定的单元格,而不会随着公式的复制和粘贴而改变引用的单元格。本专题为大家提供绝对引用相关内容的文章,大家可以免费体验。

4522

2023.08.09

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.23

热门下载

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

精品课程

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

共162课时 | 13.1万人学习

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

共28课时 | 2.4万人学习

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

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