Golang将excel转换为txt格式

将excel转换为txt的方法很多,如果通过脚本来实现,python可以,golang也可以,下面记录下如何使用golang来将excel转换为txt文件,需要用到的库为:

github.com/xuri/excelize/v2

大致原理是先读取excel的每个工作表,也就是excel下面的那个sheet,将所有的sheet读取为一个字符串切片,每个切片的内容就是由每个sheet组成的字符串,然后循环读取每一行数据,在写入到txt文件种即可,转换代码excel.go如下:

package main

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

func excelToTxt(excelPath, txtPath string) error {
	// 打开 Excel 文件
	f, err := excelize.OpenFile(excelPath)
	if err != nil {
		return fmt.Errorf("无法打开 Excel 文件: %v", err)
	}
	defer f.Close()

	// 创建或清空 TXT 文件
	txtFile, err := os.Create(txtPath)
	if err != nil {
		return fmt.Errorf("无法创建 TXT 文件: %v", err)
	}
	defer txtFile.Close()

	// 获取所有工作表
	sheets := f.GetSheetList()

	// 遍历每个工作表
	for _, sheet := range sheets {
		// 获取工作表中的所有行,实际读取的是每个sheet,读取后为切片
		rows, err := f.GetRows(sheet)
		if err != nil {
			return fmt.Errorf("读取工作表数据失败: %v", err)
		}

		// 写入每行数据,rows也是切片, 每个元素也是一个切片(这个切片就是每行的数据)
		for _, row := range rows {
                                /*
                                  这一步的目的是将表中数据指定的列的内容前后空格去掉再替换回原来数据中(可以避免转换为txt后数据不准确,或者列名不对齐的情况),row就是一个切片,里面包含每一行数据,如果有多个列要去除空格,就写多行
                                */
			        row[2] = strings.TrimSpace(row[2])
                                //row[3] = strings.TrimSpace(row[3])
				// 将行数据拼接为字符串(用制表符分隔)
				line := strings.Join(row, "\t") + "\n"
				if _, err := txtFile.WriteString(line); err != nil {
					return fmt.Errorf("写入行数据失败: %v", err)
				}
		}
		fmt.Println()
		// 分隔不同工作表(可选)
		if _, err := txtFile.WriteString("\n"); err != nil {
			return fmt.Errorf("写入分隔符失败: %v", err)
		}
	}
	return nil
}

func main() {
	// 输入和输出文件路径
	excelFile := "input.xlsx" // 输入的 Excel 文件
	txtFile := "output.txt"   // 输出的 TXT 文件

	// 执行转换
	if err := excelToTxt(excelFile, txtFile); err != nil {
		log.Fatalf("转换失败: %v", err)
	}

	log.Println("转换成功!")
}

举例

定义一个data.xlsx表格文件,内容如下:

将excel.go和data.xlsx文件放在同级目录下,执行excel.go文件,查看生成的a.txt文件,如图:

如果excel中有多个sheet,那么最终的转换结果会在同一个txt中,并用空格分隔开,如图:

标签