diff --git a/databook.go b/databook.go index e6a2a5e..b1e8007 100644 --- a/databook.go +++ b/databook.go @@ -19,14 +19,14 @@ func NewDatabook() *Databook { return db } -func NewDatabookWithData(sheetName map[string]string, data interface{}, headers ...map[string][]string) (*Databook, error) { +func NewDatabookWithData(sheetName map[string]string, data interface{}, mustMatch bool, headers ...map[string][]string) (*Databook, error) { s := len(sheetName) switch data.(type) { case map[string]*tablib.Dataset: dataModel1 := data.(map[string]*tablib.Dataset) d1 := len(dataModel1) - if s != d1 { + if s != d1 && mustMatch { return nil, ErrParamsType } @@ -49,7 +49,7 @@ func NewDatabookWithData(sheetName map[string]string, data interface{}, headers h := len(headers[0]) - if s != h || s != d2 { + if (s != h || s != d2) && mustMatch { return nil, ErrParamsType } databook := tablib.NewDatabook() @@ -61,7 +61,7 @@ func NewDatabookWithData(sheetName map[string]string, data interface{}, headers return nil, ErrParamsType } - dataset, err := NewDatasetWithData(headers[0][k], dataModel2[k]) + dataset, err := NewDatasetWithData(headers[0][k], dataModel2[k], mustMatch) if err != nil { return nil, err } @@ -75,7 +75,7 @@ func NewDatabookWithData(sheetName map[string]string, data interface{}, headers } } -func (databook *Databook) AddSheet(title string, data interface{}, headers ...[]string) error { +func (databook *Databook) AddSheet(title string, data interface{}, mustMatch bool, headers ...[]string) error { switch data.(type) { case *tablib.Dataset: @@ -87,7 +87,7 @@ func (databook *Databook) AddSheet(title string, data interface{}, headers ...[] if len(headers) != 1 { return ErrParamsType } - dataset, err := NewDatasetWithData(headers[0], dataSlice) + dataset, err := NewDatasetWithData(headers[0], dataSlice, mustMatch) if err != nil { return err } diff --git a/dataset.go b/dataset.go index cc8cd63..5e5013f 100644 --- a/dataset.go +++ b/dataset.go @@ -14,7 +14,7 @@ func NewDataset(headers []string) *tablib.Dataset { } // NewDatasetWithData creates a new Dataset. -func NewDatasetWithData(headers []string, data interface{}) (*tablib.Dataset, error) { +func NewDatasetWithData(headers []string, data interface{}, mustMatch bool) (*tablib.Dataset, error) { if data == nil { return tablib.NewDatasetWithData(headers, nil), nil } @@ -29,7 +29,7 @@ func NewDatasetWithData(headers []string, data interface{}) (*tablib.Dataset, er if len(dataSlice[0]) == 0 { return tablib.NewDatasetWithData(headers, make([][]interface{}, len(dataSlice))), nil } else { - if n != len(dataSlice[0]) { + if n != len(dataSlice[0]) && mustMatch { return nil, ErrParamsType } mapHeaders := make(map[string]int, n) diff --git a/sessionplus.go b/sessionplus.go index 584a344..dedb166 100644 --- a/sessionplus.go +++ b/sessionplus.go @@ -183,7 +183,7 @@ func (resultMap *ResultMap) SaveAsCSV(filename string, headers []string, perm os return resultMap.Error } - dataset, err := NewDatasetWithData(headers, resultMap.Results) + dataset, err := NewDatasetWithData(headers, resultMap.Results, true) if err != nil { return err } @@ -201,7 +201,7 @@ func (resultMap *ResultMap) SaveAsTSV(filename string, headers []string, perm os return resultMap.Error } - dataset, err := NewDatasetWithData(headers, resultMap.Results) + dataset, err := NewDatasetWithData(headers, resultMap.Results, true) if err != nil { return err } @@ -219,7 +219,7 @@ func (resultMap *ResultMap) SaveAsHTML(filename string, headers []string, perm o return resultMap.Error } - dataset, err := NewDatasetWithData(headers, resultMap.Results) + dataset, err := NewDatasetWithData(headers, resultMap.Results, true) if err != nil { return err } @@ -234,7 +234,7 @@ func (resultMap *ResultMap) SaveAsXML(filename string, headers []string, perm os return resultMap.Error } - dataset, err := NewDatasetWithData(headers, resultMap.Results) + dataset, err := NewDatasetWithData(headers, resultMap.Results, false) if err != nil { return err } @@ -252,7 +252,7 @@ func (resultMap *ResultMap) SaveAsXMLWithTagNamePrefixIndent(tagName string, pri return resultMap.Error } - dataset, err := NewDatasetWithData(headers, resultMap.Results) + dataset, err := NewDatasetWithData(headers, resultMap.Results, false) if err != nil { return err } @@ -270,7 +270,7 @@ func (resultMap *ResultMap) SaveAsYAML(filename string, headers []string, perm o return resultMap.Error } - dataset, err := NewDatasetWithData(headers, resultMap.Results) + dataset, err := NewDatasetWithData(headers, resultMap.Results, false) if err != nil { return err } @@ -288,7 +288,7 @@ func (resultMap *ResultMap) SaveAsJSON(filename string, headers []string, perm o return resultMap.Error } - dataset, err := NewDatasetWithData(headers, resultMap.Results) + dataset, err := NewDatasetWithData(headers, resultMap.Results, false) if err != nil { return err } @@ -306,7 +306,7 @@ func (resultMap *ResultMap) SaveAsXLSX(filename string, headers []string, perm o return resultMap.Error } - dataset, err := NewDatasetWithData(headers, resultMap.Results) + dataset, err := NewDatasetWithData(headers, resultMap.Results, true) if err != nil { return err }