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

1 篇文章 0 订阅

蒽~

直接上代码吧

在这里插入图片描述

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

}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值