From babfeb6b57ad3e63f68f5e031869efc54c9cfe0b Mon Sep 17 00:00:00 2001
From: jaby <Peter.De.Velder@ilias-solutions.com>
Date: Mon, 30 Sep 2019 14:37:52 +0200
Subject: [PATCH] Add missing ShowZeros SheetViewOption implementation

---
 sheetview.go      | 16 ++++++++++++++--
 sheetview_test.go | 14 ++++++++++++++
 xmlWorksheet.go   |  2 +-
 3 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/sheetview.go b/sheetview.go
index 09f5789219..8a5091f710 100644
--- a/sheetview.go
+++ b/sheetview.go
@@ -51,14 +51,18 @@ type (
 	// visible cell Location of the top left visible cell in the bottom right
 	// pane (when in Left-to-Right mode).
 	TopLeftCell string
+	// ShowZeros is a SheetViewOption. It specifies a flag indicating
+	// whether to "show a zero in cells that have zero value".
+	// When using a formula to reference another cell which is empty, the referenced value becomes 0
+	// when the flag is true. (Default setting is true.)
+	ShowZeros bool
+
 	/* TODO
 	// ShowWhiteSpace is a SheetViewOption. It specifies a flag indicating
 	// whether page layout view shall display margins. False means do not display
 	// left, right, top (header), and bottom (footer) margins (even when there is
 	// data in the header or footer).
 	ShowWhiteSpace bool
-	// ShowZeros is a SheetViewOption.
-	ShowZeros bool
 	// WindowProtection is a SheetViewOption.
 	WindowProtection bool
 	*/
@@ -106,6 +110,14 @@ func (o *ShowGridLines) getSheetViewOption(view *xlsxSheetView) {
 	*o = ShowGridLines(defaultTrue(view.ShowGridLines)) // Excel default: true
 }
 
+func (o ShowZeros) setSheetViewOption(view *xlsxSheetView) {
+	view.ShowZeros = boolPtr(bool(o))
+}
+
+func (o *ShowZeros) getSheetViewOption(view *xlsxSheetView) {
+	*o = ShowZeros(defaultTrue(view.ShowZeros)) // Excel default: true
+}
+
 func (o ShowRowColHeaders) setSheetViewOption(view *xlsxSheetView) {
 	view.ShowRowColHeaders = boolPtr(bool(o))
 }
diff --git a/sheetview_test.go b/sheetview_test.go
index 2e697b8540..e45b8cec35 100644
--- a/sheetview_test.go
+++ b/sheetview_test.go
@@ -95,6 +95,7 @@ func ExampleFile_GetSheetViewOptions() {
 		rightToLeft       excelize.RightToLeft
 		showFormulas      excelize.ShowFormulas
 		showGridLines     excelize.ShowGridLines
+		showZeros         excelize.ShowZeros
 		showRowColHeaders excelize.ShowRowColHeaders
 		zoomScale         excelize.ZoomScale
 		topLeftCell       excelize.TopLeftCell
@@ -105,6 +106,7 @@ func ExampleFile_GetSheetViewOptions() {
 		&rightToLeft,
 		&showFormulas,
 		&showGridLines,
+		&showZeros,
 		&showRowColHeaders,
 		&zoomScale,
 		&topLeftCell,
@@ -117,6 +119,7 @@ func ExampleFile_GetSheetViewOptions() {
 	fmt.Println("- rightToLeft:", rightToLeft)
 	fmt.Println("- showFormulas:", showFormulas)
 	fmt.Println("- showGridLines:", showGridLines)
+	fmt.Println("- showZeros:", showZeros)
 	fmt.Println("- showRowColHeaders:", showRowColHeaders)
 	fmt.Println("- zoomScale:", zoomScale)
 	fmt.Println("- topLeftCell:", `"`+topLeftCell+`"`)
@@ -137,8 +140,17 @@ func ExampleFile_GetSheetViewOptions() {
 		panic(err)
 	}
 
+	if err := f.SetSheetViewOptions(sheet, 0, excelize.ShowZeros(false)); err != nil {
+		panic(err)
+	}
+
+	if err := f.GetSheetViewOptions(sheet, 0, &showZeros); err != nil {
+		panic(err)
+	}
+
 	fmt.Println("After change:")
 	fmt.Println("- showGridLines:", showGridLines)
+	fmt.Println("- showZeros:", showZeros)
 	fmt.Println("- topLeftCell:", topLeftCell)
 
 	// Output:
@@ -147,11 +159,13 @@ func ExampleFile_GetSheetViewOptions() {
 	// - rightToLeft: false
 	// - showFormulas: false
 	// - showGridLines: true
+	// - showZeros: true
 	// - showRowColHeaders: true
 	// - zoomScale: 0
 	// - topLeftCell: ""
 	// After change:
 	// - showGridLines: false
+	// - showZeros: false
 	// - topLeftCell: B2
 }
 
diff --git a/xmlWorksheet.go b/xmlWorksheet.go
index fa07974272..c78d3ef7a7 100644
--- a/xmlWorksheet.go
+++ b/xmlWorksheet.go
@@ -167,7 +167,7 @@ type xlsxSheetView struct {
 	ShowFormulas             bool             `xml:"showFormulas,attr,omitempty"`
 	ShowGridLines            *bool            `xml:"showGridLines,attr"`
 	ShowRowColHeaders        *bool            `xml:"showRowColHeaders,attr"`
-	ShowZeros                bool             `xml:"showZeros,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"`