go 读取excel

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010918487/article/details/85523563

之前公司已经做好了一套系统,但是最近要把这套系统给别的公司,需要把别的公司的账号密码导入到db。以前我们是通过手机号,手机号短信验证码登录,现在的别的公司的账号体系是有账号密码。

于是db新增字段。给她们提供了一个注册接口,注册的时候提供账号密码等字段。

有3个层级。一级(国代),二级,三级。我们公司产品要求:如果一级下没有二级,只有三级的,那么这个三级直接隶属于当前一级。如果一级下有二级。二级下也有三级,那么就是正常的流程:三级隶属于二级,二级隶属于一级。

问题来了,新公司提供的账号有600多条,虽说已经提供了注册接口,但是我不可能一个个的c v 调用注册接口。直接写sql也是不合理的,因为这些账号之前的上下级关系,以及需要给每个账号生成不同的编号,用sql实现起来也是很复杂的。

部门老大给我说,用3个map[string]interface{},每个interface{}也分别是map[string]interface{}。其实最简单的就是把excel的数据做个整理,按照我代码能读取的简易格式,使用特定的符号拆分.

使用的第三方库:https://github.com/360EntSecGroup-Skylar/excelize.git

先看下这个excel大致长啥样。每个级别都存在为Null的情况

废话不多说,直接上代码

type Data struct {
	FirstClass  string `json:"first_class"`// 一级
	SecondClass string `json:"second_class"`// 二级
	ThirdClass  string `json:"third_class"` //三级
}

func ReadExcel(filepath string) () {
    // 首先读excel
	xlsx, err := excelize.OpenFile(filepath)
	if err != nil {
		fmt.Println(err)
		return
	}
	
	// Get all the rows in the Sheet2.
	rows := xlsx.GetRows("Sheet2")
	var datas []Data
	for i, row := range rows {
        // 去掉第一行,第一行是表头
		if i == 0 {
			continue
		}
		var data Data
		for j, colCell := range row {
			// 去掉前后空格(自己封装的方法,去掉字符串前后的特殊字符)
			colCell = tools.TrimPrefixSuffix(colCell, " ")
            // 排除第一列为Null
			if j == 0 && colCell == "Null" {
                continue
			}
            // 第一列即是一级
			if j == 0 && colCell != "Null" {
				data.FirstClass = colCell
			}
            // 第二列即是二级
			if j == 1 {
				data.SecondClass = colCell
			}
            // 三级
			if j == 2 {
				data.ThirdClass = colCell
			}

		}
		fmt.Println(util.StringifyJson(data))
		datas = append(datas, data)
	}
}

猜你喜欢

转载自blog.csdn.net/u010918487/article/details/85523563