关于php:go语言-实战导出excel并且上传到阿里云OSS

蒽~

间接上代码吧

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

}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理