// Package excel... // // Description : excel... // // Author : go_developer@163.com<白茶清欢> // // Date : 2021-11-19 3:59 下午 package excel import ( "github.com/xuri/excelize/v2" ) // NewRead 获取读取实例 // // Author : go_developer@163.com<白茶清欢> // // Date : 4:00 下午 2021/11/19 func NewRead(fullFilePath string, filePassword string) (*Read, error) { var err error read := &Read{} if read.fileHandler, err = excelize.OpenFile(fullFilePath, excelize.Options{Password: filePassword}); nil != err { return nil, err } return read, nil } // Read ... // // Author : go_developer@163.com<白茶清欢> // // Date : 4:03 下午 2021/11/19 type Read struct { fileHandler *excelize.File } // GetAllSheetList ... // // Author : go_developer@163.com<白茶清欢> // // Date : 4:06 下午 2021/11/19 func (r *Read) GetAllSheetList() []string { return r.fileHandler.GetSheetList() } // GetAllData 读取全部数据 // // Author : go_developer@163.com<白茶清欢> // // Date : 4:07 下午 2021/11/19 func (r *Read) GetAllData() (map[string][][]string, error) { var ( sheetList []string result map[string][][]string err error ) sheetList = r.GetAllSheetList() result = make(map[string][][]string) for _, sheetName := range sheetList { if result[sheetName], err = r.fileHandler.GetRows(sheetName); nil != err { return nil, err } } return result, nil } // GetAllDataToMap 读取全部数据,并返回map结构 // // Author : go_developer@163.com<白茶清欢> // // Date : 4:20 下午 2021/11/19 func (r *Read) GetAllDataToMap(fieldList []string) (map[string][]map[string]string, error) { var ( allData map[string][][]string err error formatResult map[string][]map[string]string ) formatResult = make(map[string][]map[string]string) if allData, err = r.GetAllData(); nil != err { return nil, err } for sheetName, sheetData := range allData { formatResult[sheetName] = make([]map[string]string, 0) for _, lineData := range sheetData { tmpResult := make(map[string]string) for idx, colData := range lineData { if idx >= len(fieldList) { // 指定的字段列表较短, 自动剔除后面的字段 break } tmpResult[fieldList[idx]] = colData } // 字段列表较长, 单元格不足, 自动补齐空字符串 for i := len(lineData); i < len(fieldList); i++ { tmpResult[fieldList[i]] = "" } formatResult[sheetName] = append(formatResult[sheetName], tmpResult) } } // 格式化数据 return formatResult, nil } // ExtractAssignCol 抽取指定的列,并返回list数据, 列的计数从 0 开始 // // Author : go_developer@163.com<白茶清欢> // // Date : 4:53 下午 2021/11/19 func (r *Read) ExtractAssignCol(colIndexList []int) (map[string][][]string, error) { var ( allData map[string][][]string err error formatResult map[string][][]string ) if allData, err = r.GetAllData(); nil != err { return nil, err } formatResult = make(map[string][][]string) for sheetName, sheetData := range allData { formatResult[sheetName] = make([][]string, 0) for _, lineData := range sheetData { tmpData := make([]string, 0) for _, colIdx := range colIndexList { if len(lineData) <= colIdx { // 索引越界,默认空值 tmpData = append(tmpData, "") continue } tmpData = append(tmpData, lineData[colIdx]) } formatResult[sheetName] = append(formatResult[sheetName], tmpData) } } return formatResult, nil } // ExtractAssignColToMap 抽取指定的列,并返回map数据 // // Author : go_developer@163.com<白茶清欢> // // Date : 4:53 下午 2021/11/19 func (r *Read) ExtractAssignColToMap(ruleTable map[int]string) (map[string][]map[string]string, error) { var ( allData map[string][][]string err error formatResult map[string][]map[string]string ) formatResult = make(map[string][]map[string]string) if allData, err = r.GetAllData(); nil != err { return nil, err } for sheetName, sheetData := range allData { formatResult[sheetName] = make([]map[string]string, 0) for _, lineData := range sheetData { tmpResult := make(map[string]string) for idx, colData := range lineData { colName, exist := ruleTable[idx] if !exist { // 当前字段不需要提取 continue } tmpResult[colName] = colData } for _, colName := range ruleTable { if _, exist := tmpResult[colName]; !exist { tmpResult[colName] = "" } } formatResult[sheetName] = append(formatResult[sheetName], tmpResult) } } // 格式化数据 return formatResult, nil }