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