- 取得連結
- X
- 以電子郵件傳送
- 其他應用程式
程式語言:Go
官方文件
功能:處理 excel,只能對 xlsx 處理
提醒:有時因網頁產生的 xlsx 並非正式格式,會導致處理錯誤,可用 office Excel 重新存檔即可
- Package:github.com/tealeg/xlsx
官方文件
功能:處理 excel,只能對 xlsx 處理
提醒:有時因網頁產生的 xlsx 並非正式格式,會導致處理錯誤,可用 office Excel 重新存檔即可
讀寫檔
- package main
- import (
- "fmt"
- "github.com/tealeg/xlsx"
- )
- type dataStruct struct {
- C1 string `xlsx:"0"`
- C2 bool `xlsx:"1"`
- C3 int `xlsx:"2"`
- }
- func main() {
- path := `D:\test.xlsx`
- fmt.Println("write...")
- writeFile(path)
- fmt.Println("read...")
- readFile(path)
- }
- func readFile(path string) {
- var err error
- xlFile, err := xlsx.OpenFile(path)
- if err != nil {
- panic("Open file Error")
- }
- // 列印所有數值
- for _, sheet := range xlFile.Sheets {
- for _, row := range sheet.Rows {
- for _, cell := range row.Cells {
- text := cell.String()
- fmt.Printf("%s\t", text)
- }
- fmt.Printf("\n")
- }
- }
- var sheet *xlsx.Sheet
- var row *xlsx.Row
- var cell *xlsx.Cell
- sheet = xlFile.Sheets[0]
- // 讀取所有值到 slice
- var dataSlice [][][]string
- dataSlice, err = xlsx.FileToSlice(path)
- fmt.Printf("%v\n", dataSlice)
- // 在 R2 讀取一行 row
- readRow(sheet, 1)
- // 讀取 R3C2 位置
- cell = sheet.Cell(2, 1)
- fmt.Println(cell.Value)
- // 讀取第五行到 struct
- data := dataStruct{}
- row = sheet.Rows[4]
- row.ReadStruct(&data)
- fmt.Printf("%v", data)
- }
- func readRow(sheet *xlsx.Sheet, n int) {
- // 確認有足夠的 rows
- if len(sheet.Rows) < n {
- fmt.Println("")
- }
- var row = sheet.Rows[n]
- fmt.Printf("%v\n", row.Cells)
- }
- func writeFile(path string) {
- 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("Sheet123")
- if err != nil {
- fmt.Printf(err.Error())
- }
- // 在 R2 插入一行 row
- insertRow(sheet, 1)
- // 寫入 R3C2 位置
- cell = sheet.Cell(2, 1)
- cell.Value = "R3C2"
- // 寫入 slice
- row = sheet.AddRow()
- row.WriteSlice(&[]int{1, 2, 3}, -1)
- // 寫入 struct
- data := dataStruct{
- C1: "C1",
- C2: true,
- C3: 3,
- }
- row = sheet.AddRow()
- row.WriteStruct(&data, -1)
- // 存檔
- err = file.Save(path)
- if err != nil {
- fmt.Printf(err.Error())
- }
- }
- func insertRow(sheet *xlsx.Sheet, n int) {
- // 確認有足夠的 rows
- for ; len(sheet.Rows) < n; sheet.AddRow() {
- }
- var row = xlsx.Row{Sheet: sheet}
- rear := append([]*xlsx.Row{}, sheet.Rows[n:]...)
- sheet.Rows = append(sheet.Rows[:n], &row)
- sheet.Rows = append(sheet.Rows, rear...)
- cell := row.AddCell()
- cell.Value = fmt.Sprintf("R%d 插入一行 row", n+1)
- }
留言
張貼留言