github.com/cuishu/excel 是用來輔助操作xlsx文件的庫,實現(xiàn)了xlsx文件和go對象的映射,使操作xlsx文件如同操作go對象一樣簡單分别。
依賴 github.com/360EntSecGroup-Skylar/excelize/v2
獲取 excel
go get github.com/cuishu/excel
使用方法
excel文件的第一行必須和Go struct的tag一致
For example
新建一個文件哲戚,名為 a.xlsx
Sheet1結(jié)構(gòu)如下
id | name |
---|---|
1 | Smith |
type Human {
ID int `xlsx:"id"`
Name string `xlsx:"name"`
}
讀取 Sheet
var humans []Human
Sheet{Filename: "a.xlsx", Sheet: "Sheet1"}.Scan(&humans)
for _, human := range humans {
fmt.Println(human.Name)
...
}
將go slice 寫入excel文件
var humans []Human
humans = append(Human{ID: 1, Name: "Smith"})
humans = append(Human{ID: 2, Name: "Jack"})
humans = append(Human{ID: 3, Name: "James"})
buff, err := (&Sheet{Sheet: "Sheet1"}).Export(&users)
ioutil.WriteFile("a.xlsx", buff.Bytes(), 0644)
支持的數(shù)據(jù)類型
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64
float32 float64
string
bool
映射整個excel文件
如果文件有不止一個Sheet爹耗,應(yīng)該使用一個結(jié)構(gòu)來映射它們耙考。
例
type Human struct {
ID int `xlsx:"id"`
Name string `xlsx:"name"`
}
type Animal Human
type Example struct {
Humans []Human `xlsx:"humans"`
Animals []Animal `xlsx:"animals"`
}
var example Example
// 讀
(Excel{Filename: "b.xlsx"}).Scan(&example)
// 寫入 bytes buffer
Excel{}.Export(&example)
高級用法
您可以使用自定義類型來實現(xiàn) MarshalXLSX 和 UnmarshalXLSX 來實現(xiàn)類型轉(zhuǎn)換。
例
const (
Male = 1
Female = 2
)
type Sex int
func (sex Sex) MarshalXLSX() ([]byte, error) {
if sex == Male {
return []byte("Male"), nil
} else if sex == Female {
return []byte("Female"), nil
}
return nil, errors.New("invalid value")
}
func (sex *Sex) UnmarshalXLSX(data []byte) error {
s := string(data)
if s == "Male" {
*sex = Male
return nil
}
if s == "Female" {
*sex = Female
return nil
}
return errors.New("invalid value")
}