diff options
author | Ri Xu <xuri.me@gmail.com> | 2017-07-15 20:03:44 +0800 |
---|---|---|
committer | Ri Xu <xuri.me@gmail.com> | 2017-07-15 20:03:44 +0800 |
commit | 4f942255e460d6eb3235c3973fe22eb19c328b43 (patch) | |
tree | 6fb7ded8d21e36eb9e95b7595bd3fe5857f03e2f | |
parent | 4b7d21bb63addb580c3ac533b1fd2b4236bd31a5 (diff) |
- Fix missing element in worksheet, workbook and styles. Related issue #81;
- Format code and update readme
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | styles.go | 20 | ||||
-rw-r--r-- | xmlStyles.go | 38 | ||||
-rw-r--r-- | xmlWorkbook.go | 4 | ||||
-rw-r--r-- | xmlWorksheet.go | 58 |
5 files changed, 74 insertions, 48 deletions
@@ -173,7 +173,7 @@ func main() { ## Contributing -Contributions are welcome! Open a pull request to fix a bug, or open an issue to discuss a new feature or change. +Contributions are welcome! Open a pull request to fix a bug, or open an issue to discuss a new feature or change. XML is compliant with [part 1 of the 5th edition of the ECMA-376 Standard for Office Open XML](http://www.ecma-international.org/publications/standards/Ecma-376.htm). ## Credits @@ -50,7 +50,7 @@ var builtInNumFmt = map[int]string{ // langNumFmt defined number format code (with unicode values provided for // language glyphs where they occur) in different language. var langNumFmt = map[string]map[int]string{ - "zh-tw": map[int]string{ + "zh-tw": { 27: "[$-404]e/m/d", 28: `[$-404]e"年"m"月"d"日"`, 29: `[$-404]e"年"m"月"d"日"`, @@ -71,7 +71,7 @@ var langNumFmt = map[string]map[int]string{ 57: "[$-404]e/m/d", 58: `[$-404]e"年"m"月"d"日"`, }, - "zh-cn": map[int]string{ + "zh-cn": { 27: `yyyy"年"m"月"`, 28: `m"月"d"日"`, 29: `m"月"d"日"`, @@ -92,7 +92,7 @@ var langNumFmt = map[string]map[int]string{ 57: `yyyy"年"m"月"`, 58: `m"月"d"日"`, }, - "zh-tw_unicode": map[int]string{ + "zh-tw_unicode": { 27: "[$-404]e/m/d", 28: `[$-404]e"5E74"m"6708"d"65E5"`, 29: `[$-404]e"5E74"m"6708"d"65E5"`, @@ -113,7 +113,7 @@ var langNumFmt = map[string]map[int]string{ 57: "[$-404]e/m/d", 58: `[$-404]e"5E74"m"6708"d"65E5"`, }, - "zh-cn_unicode": map[int]string{ + "zh-cn_unicode": { 27: `yyyy"5E74"m"6708"`, 28: `m"6708"d"65E5"`, 29: `m"6708"d"65E5"`, @@ -134,7 +134,7 @@ var langNumFmt = map[string]map[int]string{ 57: `yyyy"5E74"m"6708"`, 58: `m"6708"d"65E5"`, }, - "ja-jp": map[int]string{ + "ja-jp": { 27: "[$-411]ge.m.d", 28: `[$-411]ggge"年"m"月"d"日"`, 29: `[$-411]ggge"年"m"月"d"日"`, @@ -155,7 +155,7 @@ var langNumFmt = map[string]map[int]string{ 57: "[$-411]ge.m.d", 58: `[$-411]ggge"年"m"月"d"日"`, }, - "ko-kr": map[int]string{ + "ko-kr": { 27: `yyyy"年" mm"月" dd"日"`, 28: "mm-dd", 29: "mm-dd", @@ -176,7 +176,7 @@ var langNumFmt = map[string]map[int]string{ 57: `yyyy"年" mm"月" dd"日"`, 58: "mm-dd", }, - "ja-jp_unicode": map[int]string{ + "ja-jp_unicode": { 27: "[$-411]ge.m.d", 28: `[$-411]ggge"5E74"m"6708"d"65E5"`, 29: `[$-411]ggge"5E74"m"6708"d"65E5"`, @@ -197,7 +197,7 @@ var langNumFmt = map[string]map[int]string{ 57: "[$-411]ge.m.d", 58: `[$-411]ggge"5E74"m"6708"d"65E5"`, }, - "ko-kr_unicode": map[int]string{ + "ko-kr_unicode": { 27: `yyyy"5E74" mm"6708" dd"65E5"`, 28: "mm-dd", 29: "mm-dd", @@ -218,7 +218,7 @@ var langNumFmt = map[string]map[int]string{ 57: `yyyy"5E74" mm"6708" dd"65E5"`, 58: "mm-dd", }, - "th-th": map[int]string{ + "th-th": { 59: "t0", 60: "t0.00", 61: "t#,##0", @@ -239,7 +239,7 @@ var langNumFmt = map[string]map[int]string{ 80: "นน:ทท.0", 81: "d/m/bb", }, - "th-th_unicode": map[int]string{ + "th-th_unicode": { 59: "t0", 60: "t0.00", 61: "t#,##0", diff --git a/xmlStyles.go b/xmlStyles.go index 0202603..2ddcac0 100644 --- a/xmlStyles.go +++ b/xmlStyles.go @@ -35,6 +35,15 @@ type xlsxAlignment struct { WrapText bool `xml:"wrapText,attr,omitempty"` } +// xlsxProtection (Protection Properties) contains protection properties +// associated with the cell. Each cell has protection properties that can be +// set. The cell protection properties do not take effect unless the sheet has +// been protected. +type xlsxProtection struct { + Hidden bool `xml:"hidden,attr"` + Locked bool `xml:"locked,attr"` +} + // xlsxLine directly maps the line style 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. @@ -190,20 +199,21 @@ type xlsxCellStyleXfs struct { // xlsxXf directly maps the xf element. A single xf element describes all of the // formatting for a cell. type xlsxXf struct { - ApplyAlignment bool `xml:"applyAlignment,attr"` - ApplyBorder bool `xml:"applyBorder,attr"` - ApplyFill bool `xml:"applyFill,attr"` - ApplyFont bool `xml:"applyFont,attr"` - ApplyNumberFormat bool `xml:"applyNumberFormat,attr"` - ApplyProtection bool `xml:"applyProtection,attr"` - BorderID int `xml:"borderId,attr"` - FillID int `xml:"fillId,attr"` - FontID int `xml:"fontId,attr"` - NumFmtID int `xml:"numFmtId,attr"` - PivotButton bool `xml:"pivotButton,attr,omitempty"` - QuotePrefix bool `xml:"quotePrefix,attr,omitempty"` - XfID *int `xml:"xfId,attr,omitempty"` - Alignment *xlsxAlignment `xml:"alignment"` + ApplyAlignment bool `xml:"applyAlignment,attr"` + ApplyBorder bool `xml:"applyBorder,attr"` + ApplyFill bool `xml:"applyFill,attr"` + ApplyFont bool `xml:"applyFont,attr"` + ApplyNumberFormat bool `xml:"applyNumberFormat,attr"` + ApplyProtection bool `xml:"applyProtection,attr"` + BorderID int `xml:"borderId,attr"` + FillID int `xml:"fillId,attr"` + FontID int `xml:"fontId,attr"` + NumFmtID int `xml:"numFmtId,attr"` + PivotButton bool `xml:"pivotButton,attr,omitempty"` + QuotePrefix bool `xml:"quotePrefix,attr,omitempty"` + XfID *int `xml:"xfId,attr,omitempty"` + Alignment *xlsxAlignment `xml:"alignment"` + Protection *xlsxProtection `xml:"protection"` } // xlsxCellXfs directly maps the cellXfs element. This element contains the diff --git a/xmlWorkbook.go b/xmlWorkbook.go index 5b3a77c..ddf8ce2 100644 --- a/xmlWorkbook.go +++ b/xmlWorkbook.go @@ -203,7 +203,7 @@ type xlsxDefinedName struct { FunctionGroupID int `xml:"functionGroupId,attr,omitempty"` Help string `xml:"help,attr,omitempty"` Hidden bool `xml:"hidden,attr,omitempty"` - LocalSheetID int `xml:"localSheetId,attr,omitempty"` + LocalSheetID int `xml:"localSheetId,attr"` Name string `xml:"name,attr,omitempty"` PublishToServer bool `xml:"publishToServer,attr,omitempty"` ShortcutKey string `xml:"shortcutKey,attr,omitempty"` @@ -223,7 +223,7 @@ type xlsxCalcPr struct { CalcID string `xml:"calcId,attr,omitempty"` CalcMode string `xml:"calcMode,attr,omitempty"` CalcOnSave bool `xml:"calcOnSave,attr,omitempty"` - ConcurrentCalc bool `xml:"concurrentCalc,attr,omitempty"` + ConcurrentCalc *bool `xml:"concurrentCalc,attr"` ConcurrentManualCount int `xml:"concurrentManualCount,attr,omitempty"` ForceFullCalc bool `xml:"forceFullCalc,attr,omitempty"` FullCalcOnLoad bool `xml:"fullCalcOnLoad,attr,omitempty"` diff --git a/xmlWorksheet.go b/xmlWorksheet.go index 9f6b260..f31d16c 100644 --- a/xmlWorksheet.go +++ b/xmlWorksheet.go @@ -15,7 +15,8 @@ type xlsxWorksheet struct { SheetData xlsxSheetData `xml:"sheetData"` SheetProtection *xlsxSheetProtection `xml:"sheetProtection"` AutoFilter *xlsxAutoFilter `xml:"autoFilter"` - MergeCells *xlsxMergeCells `xml:"mergeCells,omitempty"` + MergeCells *xlsxMergeCells `xml:"mergeCells"` + PhoneticPr *xlsxPhoneticPr `xml:"phoneticPr"` ConditionalFormatting []*xlsxConditionalFormatting `xml:"conditionalFormatting"` DataValidations *xlsxDataValidations `xml:"dataValidations"` Hyperlinks *xlsxHyperlinks `xml:"hyperlinks"` @@ -73,7 +74,7 @@ type xlsxPageSetUp struct { Draft bool `xml:"draft,attr,omitempty"` Errors string `xml:"errors,attr,omitempty"` FirstPageNumber int `xml:"firstPageNumber,attr,omitempty"` - FitToHeight int `xml:"fitToHeight,attr,omitempty"` + FitToHeight *int `xml:"fitToHeight,attr"` FitToWidth int `xml:"fitToWidth,attr,omitempty"` HorizontalDPI float32 `xml:"horizontalDpi,attr,omitempty"` RID string `xml:"http://schemas.openxmlformats.org/officeDocument/2006/relationships id,attr,omitempty"` @@ -144,24 +145,26 @@ type xlsxSheetViews struct { // multiple windows are viewing the same sheet, multiple sheetView elements // (with corresponding workbookView entries) are saved. type xlsxSheetView struct { - WindowProtection bool `xml:"windowProtection,attr,omitempty"` - ShowFormulas bool `xml:"showFormulas,attr,omitempty"` - ShowGridLines string `xml:"showGridLines,attr,omitempty"` - ShowRowColHeaders bool `xml:"showRowColHeaders,attr,omitempty"` - ShowZeros bool `xml:"showZeros,attr,omitempty"` - RightToLeft bool `xml:"rightToLeft,attr,omitempty"` - TabSelected bool `xml:"tabSelected,attr,omitempty"` - ShowOutlineSymbols bool `xml:"showOutlineSymbols,attr,omitempty"` - DefaultGridColor bool `xml:"defaultGridColor,attr"` - View string `xml:"view,attr,omitempty"` - TopLeftCell string `xml:"topLeftCell,attr,omitempty"` - ColorID int `xml:"colorId,attr,omitempty"` - ZoomScale float64 `xml:"zoomScale,attr,omitempty"` - ZoomScaleNormal float64 `xml:"zoomScaleNormal,attr,omitempty"` - ZoomScalePageLayoutView float64 `xml:"zoomScalePageLayoutView,attr,omitempty"` - WorkbookViewID int `xml:"workbookViewId,attr"` - Pane *xlsxPane `xml:"pane,omitempty"` - Selection []*xlsxSelection `xml:"selection"` + WindowProtection bool `xml:"windowProtection,attr,omitempty"` + ShowFormulas bool `xml:"showFormulas,attr,omitempty"` + ShowGridLines string `xml:"showGridLines,attr,omitempty"` + ShowRowColHeaders bool `xml:"showRowColHeaders,attr,omitempty"` + ShowZeros bool `xml:"showZeros,attr,omitempty"` + RightToLeft bool `xml:"rightToLeft,attr,omitempty"` + TabSelected bool `xml:"tabSelected,attr,omitempty"` + ShowWhiteSpace *bool `xml:"showWhiteSpace,attr"` + ShowOutlineSymbols bool `xml:"showOutlineSymbols,attr,omitempty"` + DefaultGridColor bool `xml:"defaultGridColor,attr"` + View string `xml:"view,attr,omitempty"` + TopLeftCell string `xml:"topLeftCell,attr,omitempty"` + ColorID int `xml:"colorId,attr,omitempty"` + ZoomScale float64 `xml:"zoomScale,attr,omitempty"` + ZoomScaleNormal float64 `xml:"zoomScaleNormal,attr,omitempty"` + ZoomScalePageLayoutView float64 `xml:"zoomScalePageLayoutView,attr,omitempty"` + ZoomScaleSheetLayoutView float64 `xml:"zoomScaleSheetLayoutView,attr,omitempty"` + WorkbookViewID int `xml:"workbookViewId,attr"` + Pane *xlsxPane `xml:"pane,omitempty"` + Selection []*xlsxSelection `xml:"selection"` } // xlsxSelection directly maps the selection element in the namespace @@ -189,7 +192,7 @@ type xlsxPane struct { type xlsxSheetPr struct { XMLName xml.Name `xml:"sheetPr"` CodeName string `xml:"codeName,attr,omitempty"` - EnableFormatConditionsCalculation bool `xml:"enableFormatConditionsCalculation,attr,omitempty"` + EnableFormatConditionsCalculation *bool `xml:"enableFormatConditionsCalculation,attr"` FilterMode bool `xml:"filterMode,attr,omitempty"` Published bool `xml:"published,attr,omitempty"` SyncHorizontal bool `xml:"syncHorizontal,attr,omitempty"` @@ -344,6 +347,19 @@ type xlsxSheetProtection struct { SpinCount int `xml:"spinCount,attr,omitempty"` } +// xlsxPhoneticPr (Phonetic Properties) represents a collection of phonetic +// properties that affect the display of phonetic text for this String Item +// (si). Phonetic text is used to give hints as to the pronunciation of an East +// Asian language, and the hints are displayed as text within the spreadsheet +// cells across the top portion of the cell. Since the phonetic hints are text, +// every phonetic hint is expressed as a phonetic run (rPh), and these +// properties specify how to display that phonetic run. +type xlsxPhoneticPr struct { + Alignment string `xml:"alignment,attr,omitempty"` + FontID int `xml:"fontId,attr,omitempty"` + Type string `xml:"type,attr,omitempty"` +} + // A Conditional Format is a format, such as cell shading or font color, that a // spreadsheet application can automatically apply to cells if a specified // condition is true. This collection expresses conditional formatting rules |