package models import ( "bytes" "encoding/json" "errors" "fmt" "github.com/codinl/go-logger" "github.com/xuri/excelize/v2" ) func FileExcelReader(d []byte, cols []string) ([]byte, []map[string]interface{}, error) { reader, err := excelize.OpenReader(bytes.NewReader(d)) if err != nil { logger.Error("open reader err:", err) return nil, nil, err } sheetList := reader.GetSheetList() if len(sheetList) == 0 { logger.Error("sheet list nil") return nil, nil, err } rows, err := reader.Rows(sheetList[0]) if err != nil { logger.Error("reader rows err:", err) return nil, nil, err } sheetCols, err := reader.GetCols(sheetList[0]) if err != nil { logger.Error("reader get cols err:", err) return nil, nil, err } if len(sheetCols) == 0 { logger.Error("get cols null err") return nil, nil, err } colsMap := make([]map[string]interface{}, 0) if len(cols) == 0 { cols = make([]string, len(sheetCols)) for i := 0; i < len(sheetCols); i++ { cols[i] = fmt.Sprintf("c%02d", i) } } else { fmt.Println("cols", len(cols)) fmt.Println("sheetCols", len(sheetCols)) if len(cols) != len(sheetCols) { logger.Error("cols length not equal columns") return nil, nil, errors.New("cols length not equal columns") } } for rows.Next() { columns, err := rows.Columns() if err != nil { logger.Error("rows columns err:", err) return nil, nil, err } if len(cols) != len(columns) { logger.Error("columns length err") return nil, nil, errors.New("columns length err") } columnMap := make(map[string]interface{}, 0) for i, _ := range columns { columnMap[cols[i]] = columns[i] } fmt.Println("columnMap:", columnMap) colsMap = append(colsMap, columnMap) } fmt.Println("colsMap:", colsMap) mCols, err := json.Marshal(colsMap) if err != nil { logger.Error("marshal err:", err) return mCols, nil, err } return mCols, colsMap, nil } func FileExcelReaderImport(d []byte, cols []string) ([]byte, []map[string]string, error) { reader, err := excelize.OpenReader(bytes.NewReader(d)) if err != nil { logger.Error("open reader err:", err) return nil, nil, err } sheetList := reader.GetSheetList() if len(sheetList) == 0 { logger.Error("sheet list nil") return nil, nil, err } rows, err := reader.Rows(sheetList[0]) if err != nil { logger.Error("reader rows err:", err) return nil, nil, err } sheetCols, err := reader.GetCols(sheetList[0]) if err != nil { logger.Error("reader get cols err:", err) return nil, nil, err } if len(sheetCols) == 0 { logger.Error("get cols null err") return nil, nil, err } colsMap := make([]map[string]string, 0) if len(cols) == 0 { cols = make([]string, len(sheetCols)) for i := 0; i < len(sheetCols); i++ { cols[i] = fmt.Sprintf("c%02d", i) } } else { //fmt.Println("cols", len(cols)) //fmt.Println("sheetCols", len(sheetCols)) if len(cols) != len(sheetCols) { logger.Error("cols length not equal columns") return nil, nil, errors.New("cols length not equal columns") } } for rows.Next() { columns, err := rows.Columns() if err != nil { logger.Error("rows columns err:", err) return nil, nil, err } if len(cols) != len(columns) { logger.Error("columns length err") return nil, nil, errors.New("columns length err") } columnMap := make(map[string]string, 0) for i, _ := range columns { columnMap[cols[i]] = columns[i] } //fmt.Println("columnMap:", columnMap) colsMap = append(colsMap, columnMap) } //fmt.Println("colsMap:", colsMap) mCols, err := json.Marshal(colsMap) if err != nil { logger.Error("marshal err:", err) return mCols, nil, err } return mCols, colsMap, nil } func FileExcelOpenFile(fileName string, cols []string) ([]byte, []map[string]interface{}, error) { reader, err := excelize.OpenFile(fileName) //reader, err := excelize.OpenReader(bytes.NewReader(d)) if err != nil { logger.Error("open reader err:", err) return nil, nil, err } sheetList := reader.GetSheetList() if len(sheetList) == 0 { logger.Error("sheet list nil") return nil, nil, err } rows, err := reader.Rows(sheetList[0]) if err != nil { logger.Error("reader rows err:", err) return nil, nil, err } sheetCols, err := reader.GetCols(sheetList[0]) if err != nil { logger.Error("reader get cols err:", err) return nil, nil, err } if len(sheetCols) == 0 { logger.Error("get cols null err") return nil, nil, err } colsMap := make([]map[string]interface{}, 0) if len(cols) == 0 { cols = make([]string, len(sheetCols)) for i := 0; i < len(sheetCols); i++ { cols[i] = fmt.Sprintf("c%02d", i) } } else { fmt.Println("cols", len(cols)) fmt.Println("sheetCols", len(sheetCols)) if len(cols) != len(sheetCols) { logger.Error("cols length not equal columns") return nil, nil, errors.New("cols length not equal columns") } } for rows.Next() { columns, err := rows.Columns() if err != nil { logger.Error("rows columns err:", err) return nil, nil, err } if len(cols) != len(columns) { //fmt.Println("cols", len(cols)) //fmt.Println("columns", len(columns)) logger.Error("columns length err") fmt.Println("columns", columns[0]) //return nil, nil, errors.New("columns length err") continue } columnMap := make(map[string]interface{}, 0) for i, _ := range columns { columnMap[cols[i]] = columns[i] } //fmt.Println("columnMap:", columnMap) colsMap = append(colsMap, columnMap) } //fmt.Println("colsMap:", colsMap) mCols, err := json.Marshal(colsMap) if err != nil { logger.Error("marshal err:", err) return mCols, nil, err } return mCols, colsMap, nil }