230 lines
5.5 KiB
Go
230 lines
5.5 KiB
Go
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
|
|
}
|