diff --git a/excel/abstract.go b/excel/abstract.go index eef34f8..4b2a28b 100644 --- a/excel/abstract.go +++ b/excel/abstract.go @@ -21,7 +21,7 @@ type ColumnRecognizer struct { type ExcelAnalyzer[T any] struct { File *excelize.File ActivedSheet string - Regconizers []ColumnRecognizer + Regconizers []*ColumnRecognizer } type ExcelAnalysisError struct { @@ -47,7 +47,7 @@ func (r *ColumnRecognizer) Recognize(cellValue string) bool { return false } -func NewExcelAnalyzer[T any](file io.Reader, recognizers []ColumnRecognizer) (*ExcelAnalyzer[T], error) { +func NewExcelAnalyzer[T any](file io.Reader, recognizers []*ColumnRecognizer) (*ExcelAnalyzer[T], error) { excelFile, err := excelize.OpenReader(file) if err != nil { return nil, err @@ -60,7 +60,7 @@ func NewExcelAnalyzer[T any](file io.Reader, recognizers []ColumnRecognizer) (*E }, nil } -func (a *ExcelAnalyzer[T]) AddRecognizer(recognizer ColumnRecognizer) { +func (a *ExcelAnalyzer[T]) AddRecognizer(recognizer *ColumnRecognizer) { a.Regconizers = append(a.Regconizers, recognizer) } @@ -85,7 +85,7 @@ func (a *ExcelAnalyzer[T]) Analysis(bean T) ([]T, []ExcelAnalysisError) { } elementType := reflect.TypeOf(bean) - collections := reflect.MakeSlice(elementType, 0, 0) + collections := reflect.MakeSlice(reflect.SliceOf(elementType), 0, 0) for rowIndex, cols := range rows { // 标题行,需要完成识别动作 if rowIndex == 0 { @@ -100,14 +100,14 @@ func (a *ExcelAnalyzer[T]) Analysis(bean T) ([]T, []ExcelAnalysisError) { if alias, ok := field.Tag.Lookup("excel"); ok { for _, recognizer := range a.Regconizers { if alias == recognizer.Tag && recognizer.MatchIndex != -1 { - actualField := instance.FieldByName(field.Name) + actualField := instance.Elem().FieldByName(field.Name) matchValue := cols[recognizer.MatchIndex] switch field.Type.String() { case "string": actualField.Set(reflect.ValueOf(matchValue)) case "*string": if len(matchValue) > 0 { - actualField.Elem().Set(reflect.ValueOf(&matchValue)) + actualField.Set(reflect.ValueOf(&matchValue)) } case "decimal.Decimal": decimalValue, err := decimal.NewFromString(matchValue) diff --git a/excel/meter_archive.go b/excel/meter_archive.go index 7ad3200..f73aaf2 100644 --- a/excel/meter_archive.go +++ b/excel/meter_archive.go @@ -5,7 +5,7 @@ import ( "io" ) -var meter04kVExcelRecognizers = []ColumnRecognizer{ +var meter04kVExcelRecognizers = []*ColumnRecognizer{ {Pattern: []string{"表号"}, Tag: "code", MatchIndex: -1}, {Pattern: []string{"户名"}, Tag: "name", MatchIndex: -1}, {Pattern: []string{"户址"}, Tag: "address", MatchIndex: -1}, @@ -13,7 +13,7 @@ var meter04kVExcelRecognizers = []ColumnRecognizer{ {Pattern: []string{"电话"}, Tag: "phone", MatchIndex: -1}, {Pattern: []string{"倍率"}, Tag: "ratio", MatchIndex: -1}, {Pattern: []string{"序号"}, Tag: "seq", MatchIndex: -1}, - {Pattern: []string{"公共", "公共设备"}, Tag: "public", MatchIndex: -1}, + {Pattern: []string{"公用", "公用设备"}, Tag: "public", MatchIndex: -1}, {Pattern: []string{"摊薄"}, Tag: "dilute", MatchIndex: -1}, }