- 取得連結
- 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)
}
留言
張貼留言