蒽~
间接上代码吧
//数据格式以json为根底 如果复制此段代码进行运行请间接通过编译器提醒装置所需类库/********这部分代码不必写的哦--间接依据定义好的json数据格式在线生成,在线工具网址在代码上面******************/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 为导出数据 //label 定义为导出 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) }}//解决并且组装数据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)}
https://oktools.net/json2go
到这里咱们就曾经导出excel胜利了,接下来将导出来的文件上传到阿里云OSS —— 不须要上传到OSS 的童鞋们,可不看!!!
老规矩间接上代码
func UploadOss(file string) { // Endpoint以杭州为例,其它Region请按理论状况填写。 endpoint := "*******" // 阿里云主账号AccessKey领有所有API的拜访权限,危险很高。强烈建议您创立并应用RAM账号进行API拜访或日常运维,请登录 https://ram.console.aliyun.com 创立RAM账号。 accessKeyId := "*******" accessKeySecret := "******" bucketName := "*******" // <yourObjectName>上传文件到OSS时须要指定蕴含文件后缀在内的残缺门路,例如abc/efg/123.jpg。 objectName := "post/Book1.xlsx" // <yourLocalFileName>由本地文件门路加文件名包含后缀组成,例如/users/local/myfile.txt。 localFileName := "Book1.xlsx" // 创立OSSClient实例。 client, err := oss.New(endpoint, accessKeyId, accessKeySecret) if err != nil { handleError(err) } // 获取存储空间。 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)}}