You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang中使用excelize库遍历Excel工作表列单元格的方法

Golang 基于excelize库遍历Excel列单元格实现方案

你原有代码的问题在于GetCellValue方法仅支持获取单个指定坐标的单元格值,无法返回整列批量数据,因此无法实现遍历需求。
本次使用的Excel文件示例如下:
Excel文件示例截图

以下是两种可直接落地的实现方案:

方案1:按列名遍历指定列(单列表场景首选)

适用于明确需要遍历某一固定列的场景,逻辑为获取工作表有效总行数后,循环拼接单元格坐标逐个取值。

package main

import (
	"fmt"
	"github.com/xuri/excelize/v2"
)

func main() {
	f, err := excelize.OpenFile("pricematching.xlsx")
	if err != nil {
		fmt.Println("打开文件失败:", err)
		return
	}
	// 释放文件句柄
	defer func() {
		_ = f.Close()
	}()

	sheetName := "sheet1"
	targetCol := "A" // 自定义要遍历的列,示例为A列
	startRow := 2    // 自定义起始行,示例从第2行开始跳过表头

	// 获取工作表所有行数据,用于计算有效总行数
	rows, err := f.GetRows(sheetName)
	if err != nil {
		fmt.Println("读取工作表失败:", err)
		return
	}
	totalRow := len(rows)

	// 逐行遍历目标列
	for rowNum := startRow; rowNum <= totalRow; rowNum++ {
		cellAxis := fmt.Sprintf("%s%d", targetCol, rowNum)
		cellVal, err := f.GetCellValue(sheetName, cellAxis)
		if err != nil {
			fmt.Printf("读取单元格%s失败: %v\n", cellAxis, err)
			continue
		}
		// 此处编写单元格业务处理逻辑
		fmt.Printf("单元格%s值为:%s\n", cellAxis, cellVal)
	}
}

方案2:全量行数据按列索引提取(多列处理场景首选)

适用于需要同时处理多列数据的场景,GetRows方法返回[][]string结构,外层切片对应行、内层切片对应每行的列值,列索引从0开始计数(A列对应索引0、B列对应索引1,以此类推)。

package main

import (
	"fmt"
	"github.com/xuri/excelize/v2"
)

func main() {
	f, err := excelize.OpenFile("pricematching.xlsx")
	if err != nil {
		fmt.Println("打开文件失败:", err)
		return
	}
	defer func() {
		_ = f.Close()
	}()

	sheetName := "sheet1"
	targetColIdx := 0 // 自定义要遍历的列索引,示例为A列对应索引0
	startRowIdx := 1  // 自定义起始行索引,从第2行开始对应切片索引1

	allRows, err := f.GetRows(sheetName)
	if err != nil {
		fmt.Println("读取工作表失败:", err)
		return
	}

	// 逐行提取目标列值
	for rowIdx := startRowIdx; rowIdx < len(allRows); rowIdx++ {
		// 校验当前行列数,避免索引越界
		if len(allRows[rowIdx]) > targetColIdx {
			cellVal := allRows[rowIdx][targetColIdx]
			// 此处编写单元格业务处理逻辑
			fmt.Printf("第%d行目标列值为:%s\n", rowIdx+1, cellVal)
		} else {
			// 处理当前行目标列为空的场景
			fmt.Printf("第%d行目标列为空\n", rowIdx+1)
		}
	}
}

注意事项:

  • excelize对工作表名大小写敏感,填写sheet名时需要和文件内实际名称完全匹配
  • 遍历过程中必须做索引长度校验,避免空行/短行导致的panic
  • 打开文件后必须显式关闭释放句柄,避免文件被持续占用

内容的提问来源于stack exchange,提问作者نعمان منذر محمود الجميلي

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 08:18:27