美文网首页
go语言 实战!!导出excel并且上传到阿里云OSS

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

作者: smallsha | 来源:发表于2021-06-22 19:48 被阅读0次

    蒽~

    直接上代码吧

    doutub_img (1).png
    //数据格式以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)
    }
    
    
    
    
    
    下载.png

    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)
    }
    
    }
    
    下载 (1).png

    相关文章

      网友评论

          本文标题:go语言 实战!!导出excel并且上传到阿里云OSS

          本文链接:https://www.haomeiwen.com/subject/wnmmyltx.html