From 81533fcdf30f7f44261405363b9403dfd92074d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=B6=9B?= Date: Wed, 17 Aug 2022 14:46:50 +0800 Subject: [PATCH] =?UTF-8?q?fix(excel):=E4=BF=AE=E5=A4=8DExcel=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E8=A7=A3=E6=9E=90=E6=97=B6=E8=AF=86=E5=88=AB=E5=99=A8?= =?UTF-8?q?=E4=B8=8D=E8=83=BD=E4=BF=9D=E5=AD=98=E5=88=97=E7=B4=A2=E5=BC=95?= =?UTF-8?q?=E5=92=8C=E6=97=A0=E6=B3=95=E5=AF=B9=E5=AD=97=E7=AC=A6=E4=B8=B2?= =?UTF-8?q?=E6=8C=87=E9=92=88=E8=B5=8B=E5=80=BC=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- excel/abstract.go | 12 ++++++------ excel/meter_archive.go | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) 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}, }