命令记不住

登陆

Go 表格处理

Go表格处理

1.下载程序扩展包

  • 国内进行设置GoProxy
//地址: https://goproxy.cn/
$ go env -w GO111MODULE=on
$ go env -w GOPROXY=https://goproxy.cn,direct
  • 下载和使用xlsx包
//使用的包:  
github.com/tealeg/xlsx  
//get下载:  
go get github.com/tealeg/xlsx  
//mod下载:  
go mod download github.com/tealeg/xlsx  
  • 使用go mod
C:\Users\vSphere\go\src\xlsx>go mod init xlsx
go: creating new go.mod: module xlsx

C:\Users\vSphere\go\src\xlsx>go run 01.创建xlsx.go

使用mod文件中的内容进行包拉取, go mod tidy

2.创建xlsx文件

  • 创建一个xlsx文件要写入sheet名称
package main

import (
	"fmt"
	"github/tealeg/xlsx"
)

func main() {
	//新建表格
	file := xlsx.NewFile()
	//保存文件
	err := file.Save("F:/文件.xlsx")
	if err != nil {
		fmt.Println(err.Error())
	} else {
		fmt.Println("创建成功!")
	}
}

3.写入表格

package main

import (
	"fmt"
	"github/tealeg/xlsx"
)

// 列
type Cell struct {
	Cname []string
}

// 行
type Row struct {
	Cell
}

// 表
type Sheet struct {
	sheetName string
	Row
}

// 创建表格
func CreateExcel(data Sheet) {
	var file *xlsx.File
	var sheet *xlsx.Sheet
	var row *xlsx.Row
	var cell *xlsx.Cell
	var err error

	//新建表格
	file = xlsx.NewFile()
	//设置当前页的名称
	sheet, err = file.AddSheet(data.sheetName)
	if err != nil {
		fmt.Printf(err.Error())
	}
	//添加行
	row = sheet.AddRow()
	//设置行高
	row.SetHeightCM(1.0)
	//添加列,并设置内容
	for _, v := range data.Cname {
		cell = row.AddCell()
		cell.Value = v
	}
	//保存文件
	err = file.Save("F:/Go语言生成.xlsx")
	if err != nil {
		fmt.Printf(err.Error())
	}
}

func main() {
	//设置表头信息
	sheet := Sheet{"小组信息",
		Row{Cell{[]string{"姓名", "性别", "年龄", "成绩", "住址"}}}}
	CreateExcel(sheet)
}

4.读取和操作表格

package main

import (
	"fmt"
	"github/tealeg/xlsx"
)

type Person struct {
	Name       string //微信昵称
	Education  string //学历
	University string //高校
	Industry   string //行业
	Workyear   string //工作年限
	Position   string //职位
	Salary     string //薪资
	Language   string //编程语言
}

func Getxlsx() {
	var per []Person
	//读取Excel文件
	file, err := xlsx.OpenFile("D:/Go语言工程师信息表.xlsx")
	if err != nil {
		fmt.Printf("open failed: %s\n", err)
		return
	}
	//页
	for _, sheet := range file.Sheets {
		//行
		for _, row := range sheet.Rows {
			//列
			var temp Person
			//将Excel每一列文件读取放在字符串切片中
			var str []string
			for _, cell := range row.Cells {
				str = append(str, cell.String())
			}
			//按照列顺序将数据存储在结构体中
			temp.Name = str[0]
			temp.Education = str[1]
			temp.University = str[2]
			temp.Industry = str[3]
			temp.Workyear = str[4]
			temp.Position = str[5]
			temp.Salary = str[6]
			temp.Language = str[7]
			//将结构体放在结构体切片per中
			per = append(per, temp)
		}
	}
	fmt.Println(per)
}
func main() {
	Getxlsx()
}
推荐阅读