18910140161

go语言 实战!!导出excel并且上传到阿里云OSS

顺晟科技

2021-06-25 08:47:23

184

蒽~

直接上代码吧

//数据格式以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)}}

相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航