蒽~
直接上代碼吧
//數(shù)據(jù)格式以json為基礎(chǔ) 如果復(fù)制此段代碼進(jìn)行運(yùn)行請(qǐng)直接通過編譯器提示安裝所需類庫
/********這部分代碼不用寫的哦--直接根據(jù)定義好的json數(shù)據(jù)格式在線生成宴胧,在線工具網(wǎng)址在代碼下面******************/
type AutoGenerated struct {
URL []URL `json:"url"`
Label Label `json:"label"`
}
type URL struct {
StoreName string `json:"store_name"`
ProductID string `json:"product_id"`
}
type Label struct {
StoreName string `json:"store_name"`
ProductID string `json:"product_id"`
}
/************************.這部分代碼不用寫的哦*******************/
func init() {
//data 為導(dǎo)出數(shù)據(jù)
//label 定義為導(dǎo)出
jsonData := []byte(`
{
"data":[
{
"store_name":"watotomama",
"product_id":"5942170910885"
}
],
"label":{
"store_name":"商戶名稱",
"product_id":"沒有sku的shopify商品ID"
}
}
`)
var basket AutoGenerated
err := json.Unmarshal(jsonData, &basket)
if err != nil {
fmt.Println(err)
}
result := ExcelData(basket)
fmt.Printf("%# v\n", pretty.Formatter(result))
f := excelize.NewFile()
// Create a new sheet.
index := f.NewSheet("Sheet1")
for i, i2 := range result {
// Set value of a cell.
f.SetCellValue("Sheet1", i, i2)
}
// Set active sheet of the workbook.
f.SetActiveSheet(index)
// Save spreadsheet by the given path.
if err := f.SaveAs("Book1.xlsx"); err != nil {
fmt.Println(err)
}
}
//處理并且組裝數(shù)據(jù)
func ExcelData(data AutoGenerated) map[string]interface{} {
url := data.URL
label := data.Label
labelT := reflect.TypeOf(label)
tempData := make(map[string]interface{})
labelV := reflect.ValueOf(label)
for i := 0; i < len(url); i++ {
col := 65
for k := 0; k < labelT.NumField(); k++ {
key1 := labelT.Field(k).Name
if i == 0 {
ch := HandleChr(col)+strconv.Itoa(i+1)
ch1 := HandleChr(col)+strconv.Itoa(i+2)
tempData[ch] = labelV.Field(k).Interface()
tempData[ch1] = reflect.ValueOf(url[i]).FieldByName(key1)
} else {
ch := HandleChr(col)+strconv.Itoa(i+2)
tempData[ch] = reflect.ValueOf(url[i]).FieldByName(key1)
}
col++
//key := t.Field(k).Name
//value := v.Field(k).Interface()
}
}
fmt.Printf("%s\n", pretty.Formatter(tempData))
return tempData
}
//返回ASICC碼
func HandleChr(num int) string {
ch1 := fmt.Sprintf("%c", rune(num))
return strings.ToUpper(ch1)
}
到這里我們就已經(jīng)導(dǎo)出excel成功了,接下來將導(dǎo)出來的文件上傳到阿里云OSS —— 不需要上傳到OSS 的童鞋們么翰,可不看!!!
老規(guī)矩直接上代碼
func UploadOss(file string) {
// Endpoint以杭州為例牺汤,其它Region請(qǐng)按實(shí)際情況填寫。
endpoint := "*******"
// 阿里云主賬號(hào)AccessKey擁有所有API的訪問權(quán)限浩嫌,風(fēng)險(xiǎn)很高檐迟。強(qiáng)烈建議您創(chuàng)建并使用RAM賬號(hào)進(jìn)行API訪問或日常運(yùn)維,請(qǐng)登錄 https://ram.console.aliyun.com 創(chuàng)建RAM賬號(hào)码耐。
accessKeyId := "*******"
accessKeySecret := "******"
bucketName := "*******"
// <yourObjectName>上傳文件到OSS時(shí)需要指定包含文件后綴在內(nèi)的完整路徑追迟,例如abc/efg/123.jpg。
objectName := "post/Book1.xlsx"
// <yourLocalFileName>由本地文件路徑加文件名包括后綴組成骚腥,例如/users/local/myfile.txt敦间。
localFileName := "Book1.xlsx"
// 創(chuàng)建OSSClient實(shí)例。
client, err := oss.New(endpoint, accessKeyId, accessKeySecret)
if err != nil {
handleError(err)
}
// 獲取存儲(chǔ)空間束铭。
bucket, err := client.Bucket(bucketName)
if err != nil {
handleError(err)
}
// 上傳文件廓块。
err = bucket.PutObjectFromFile(objectName, localFileName)
if err != nil {
handleError(err)
}
fmt.Println("上傳成功哦")
}
func handleError(err error) {
fmt.Println("Error:", err)
os.Exit(-1)
}
}