共计 2679 个字符,预计需要花费 7 分钟才能阅读完成。
蒽~
间接上代码吧
// 数据格式以 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)
}
}
正文完