From 72701e89c7145f9d08a79c93040e232b2875c855 Mon Sep 17 00:00:00 2001 From: xuri Date: Sat, 4 May 2019 00:10:11 +0800 Subject: [PATCH] Fix structs fields definition errors and keep double quotes in data validation formula --- datavalidation.go | 8 +++--- xmlWorksheet.go | 68 ++++++++++++++++++++++++++++++----------------- 2 files changed, 47 insertions(+), 29 deletions(-) diff --git a/datavalidation.go b/datavalidation.go index 8fb9623b26..56b96fd6db 100644 --- a/datavalidation.go +++ b/datavalidation.go @@ -112,7 +112,7 @@ func (dd *DataValidation) SetDropList(keys []string) error { if dataValidationFormulaStrLen < len(formula) { return fmt.Errorf(dataValidationFormulaStrLenErr) } - dd.Formula1 = formula + dd.Formula1 = fmt.Sprintf("%s", formula) dd.Type = convDataValidationType(typeList) return nil } @@ -121,12 +121,12 @@ func (dd *DataValidation) SetDropList(keys []string) error { func (dd *DataValidation) SetRange(f1, f2 int, t DataValidationType, o DataValidationOperator) error { formula1 := fmt.Sprintf("%d", f1) formula2 := fmt.Sprintf("%d", f2) - if dataValidationFormulaStrLen < len(dd.Formula1) || dataValidationFormulaStrLen < len(dd.Formula2) { + if dataValidationFormulaStrLen+21 < len(dd.Formula1) || dataValidationFormulaStrLen+21 < len(dd.Formula2) { return fmt.Errorf(dataValidationFormulaStrLenErr) } - dd.Formula1 = formula1 - dd.Formula2 = formula2 + dd.Formula1 = fmt.Sprintf("%s", formula1) + dd.Formula2 = fmt.Sprintf("%s", formula2) dd.Type = convDataValidationType(t) dd.Operator = convDataValidationOperatior(o) return nil diff --git a/xmlWorksheet.go b/xmlWorksheet.go index f3323cbb71..f2eb47abb5 100644 --- a/xmlWorksheet.go +++ b/xmlWorksheet.go @@ -53,23 +53,27 @@ type xlsxDrawing struct { // footers on the first page can differ from those on odd- and even-numbered // pages. In the latter case, the first page is not considered an odd page. type xlsxHeaderFooter struct { - DifferentFirst bool `xml:"differentFirst,attr,omitempty"` - DifferentOddEven bool `xml:"differentOddEven,attr,omitempty"` - OddHeader []*xlsxOddHeader `xml:"oddHeader"` - OddFooter []*xlsxOddFooter `xml:"oddFooter"` -} - -// xlsxOddHeader directly maps the oddHeader element in the namespace -// http://schemas.openxmlformats.org/spreadsheetml/2006/main - currently I have -// not checked it for completeness - it does as much as I need. -type xlsxOddHeader struct { - Content string `xml:",chardata"` -} - -// xlsxOddFooter directly maps the oddFooter element in the namespace -// http://schemas.openxmlformats.org/spreadsheetml/2006/main - currently I have -// not checked it for completeness - it does as much as I need. -type xlsxOddFooter struct { + AlignWithMargins bool `xml:"alignWithMargins,attr,omitempty"` + DifferentFirst bool `xml:"differentFirst,attr,omitempty"` + DifferentOddEven bool `xml:"differentOddEven,attr,omitempty"` + ScaleWithDoc bool `xml:"scaleWithDoc,attr,omitempty"` + OddHeader string `xml:"oddHeader,omitempty"` + OddFooter string `xml:"oddFooter,omitempty"` + EvenHeader string `xml:"evenHeader,omitempty"` + EvenFooter string `xml:"evenFooter,omitempty"` + FirstFooter string `xml:"firstFooter,omitempty"` + FirstHeader string `xml:"firstHeader,omitempty"` + DrawingHF *xlsxDrawingHF `xml:"drawingHF"` +} + +// xlsxDrawingHF (Drawing Reference in Header Footer) specifies the usage of +// drawing objects to be rendered in the headers and footers of the sheet. It +// specifies an explicit relationship to the part containing the DrawingML +// shapes used in the headers and footers. It also indicates where in the +// headers and footers each shape belongs. One drawing object can appear in +// each of the left section, center section and right section of a header and +// a footer. +type xlsxDrawingHF struct { Content string `xml:",chardata"` } @@ -324,16 +328,16 @@ type DataValidation struct { Error *string `xml:"error,attr"` ErrorStyle *string `xml:"errorStyle,attr"` ErrorTitle *string `xml:"errorTitle,attr"` - Operator string `xml:"operator,attr"` + Operator string `xml:"operator,attr,omitempty"` Prompt *string `xml:"prompt,attr"` - PromptTitle *string `xml:"promptTitle"` - ShowDropDown bool `xml:"showDropDown,attr"` - ShowErrorMessage bool `xml:"showErrorMessage,attr"` - ShowInputMessage bool `xml:"showInputMessage,attr"` + PromptTitle *string `xml:"promptTitle,attr"` + ShowDropDown bool `xml:"showDropDown,attr,omitempty"` + ShowErrorMessage bool `xml:"showErrorMessage,attr,omitempty"` + ShowInputMessage bool `xml:"showInputMessage,attr,omitempty"` Sqref string `xml:"sqref,attr"` Type string `xml:"type,attr"` - Formula1 string `xml:"formula1"` - Formula2 string `xml:"formula2"` + Formula1 string `xml:",innerxml"` + Formula2 string `xml:",innerxml"` } // xlsxC directly maps the c element in the namespace @@ -482,7 +486,7 @@ type xlsxIconSet struct { type xlsxCfvo struct { Gte bool `xml:"gte,attr,omitempty"` Type string `xml:"type,attr,omitempty"` - Val string `xml:"val,attr"` + Val string `xml:"val,attr,omitempty"` ExtLst *xlsxExtLst `xml:"extLst"` } @@ -627,3 +631,17 @@ type FormatSheetProtection struct { SelectUnlockedCells bool Sort bool } + +// FormatHeaderFooter directly maps the settings of header and footer. +type FormatHeaderFooter struct { + AlignWithMargins bool + DifferentFirst bool + DifferentOddEven bool + ScaleWithDoc bool + OddHeader string + OddFooter string + EvenHeader string + EvenFooter string + FirstFooter string + FirstHeader string +}