GO Excel 转 JSON (完整代码)

package mainimport ("fmt""github.com/xuri/excelize/v2""io/ioutil""os""path/filepath"
)func init() {}// 配置文件目录
var configPath string = "../../Configs"
var outjsonPath string = "./json/"func getFileList(path string) []string {var all_file []stringfinfo, _ := ioutil.ReadDir(path)for _, info := range finfo {if filepath.Ext(info.Name())==".xlsx"{real_path := path + "/" + info.Name()if info.IsDir() {//all_file = append(all_file, getFileList(real_path)...)} else {all_file = append(all_file, real_path)}}}return all_file
}type meta struct {Key stringIdx intTyp string
}type rowdata []interface{}func parseFile(file string) {fmt.Println("\n\n\n\n", file)xlsx, err := excelize.OpenFile(file)if err != nil {panic(err.Error())}//[line][colidx][data]sheets := xlsx.GetSheetList()for _, s := range sheets{rows, err := xlsx.GetRows(s)if err != nil {return}if len(rows) < 5 {return}colNum := len(rows[1])fmt.Println("col num:", colNum)metaList := make([]*meta, 0, colNum)dataList := make([]rowdata, 0, len(rows)-4)for line, row := range rows {switch line {case 0:	// sheet 名case 1:	// col namefor idx, colname := range row{fmt.Println(idx, colname, len(metaList))metaList = append(metaList, &meta{Key: colname, Idx: idx})}case 2:	// data typefmt.Println("meta cot:%d, rol cot:%d", len(metaList), len(row))for idx, typ := range row {metaList[idx].Typ=typ}case 3:	// descdefault: //>= 4 row datadata := make(rowdata, colNum)for k:=0;k

对应的excel格式如下

如表格式有差异,可调整解析 switch line中代码

数字类型和字符类型, 表格中为空则json默认补充填0或“”

就分享到这里吧,欢迎留言交流讨论


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部