发布时间:2024-12-23 00:25:57
首先,我们需要在Go项目中导入excelize包,并通过"read"方法读取Excel文件:
```go
import (
"fmt"
"github.com/360EntSecGroup-Skylar/excelize/v2"
)
func main() {
f, err := excelize.OpenFile("test.xlsx")
if err != nil {
fmt.Println(err)
return
}
// 读取工作表中的数据
rows, err := f.GetRows("Sheet1")
if err != nil {
fmt.Println(err)
return
}
// 遍历每一行数据
for _, row := range rows {
// 处理每一行数据
}
}
```
例如,我们可以定义一个结构体来存储Excel中的每一行数据:
```go
type Employee struct {
ID int
Name string
Age int
Position string
}
```
然后,我们可以遍历读取的每一行数据,并将其映射到刚刚定义的结构体中:
```go
employees := []Employee{}
for i, row := range rows {
if i == 0 {
// 忽略表头
continue
}
employee := Employee{}
employee.ID, _ = strconv.Atoi(row[0])
employee.Name = row[1]
employee.Age, _ = strconv.Atoi(row[2])
employee.Position = row[3]
employees = append(employees, employee)
}
```
下面是一个简单的例子,演示了如何将数据写入到Excel文件中:
```go
// 创建新的Excel文件
f := excelize.NewFile()
// 在第一个单元格中写入标题
f.SetCellValue("Sheet1", "A1", "ID")
f.SetCellValue("Sheet1", "B1", "Name")
f.SetCellValue("Sheet1", "C1", "Age")
f.SetCellValue("Sheet1", "D1", "Position")
// 写入每一行数据
for i, employee := range employees {
f.SetCellValue("Sheet1", fmt.Sprintf("A%d", i+2), employee.ID)
f.SetCellValue("Sheet1", fmt.Sprintf("B%d", i+2), employee.Name)
f.SetCellValue("Sheet1", fmt.Sprintf("C%d", i+2), employee.Age)
f.SetCellValue("Sheet1", fmt.Sprintf("D%d", i+2), employee.Position)
}
// 保存Excel文件
if err := f.SaveAs("output.xlsx"); err != nil {
fmt.Println(err)
return
}
// 写入成功
```