1 // Copyright 2016 - 2024 The excelize Authors. All rights reserved. Use of
2 // this source code is governed by a BSD-style license that can be found in
5 // Package excelize providing a set of functions that allow you to write to and
6 // read from XLAM / XLSM / XLSX / XLTM / XLTX files. Supports reading and
7 // writing spreadsheet documents generated by Microsoft Excelâ„¢ 2007 and later.
8 // Supports complex components by high compatibility, and provided streaming
9 // API for generating or reading data from a worksheet with huge amounts of
10 // data. This library needs Go version 1.18 or later.
14 // getSheetView returns the SheetView object
15 func (f *File) getSheetView(sheet string, viewIndex int) (*xlsxSheetView, error) {
16 ws, err := f.workSheetReader(sheet)
20 if ws.SheetViews == nil {
21 ws.SheetViews = &xlsxSheetViews{
22 SheetView: []xlsxSheetView{{WorkbookViewID: 0}},
26 if viewIndex < -len(ws.SheetViews.SheetView) {
27 return nil, newViewIdxError(viewIndex)
29 viewIndex = len(ws.SheetViews.SheetView) + viewIndex
30 } else if viewIndex >= len(ws.SheetViews.SheetView) {
31 return nil, newViewIdxError(viewIndex)
34 return &(ws.SheetViews.SheetView[viewIndex]), err
37 // setSheetView set sheet view by given options.
38 func (view *xlsxSheetView) setSheetView(opts *ViewOptions) {
39 if opts.DefaultGridColor != nil {
40 view.DefaultGridColor = opts.DefaultGridColor
42 if opts.RightToLeft != nil {
43 view.RightToLeft = *opts.RightToLeft
45 if opts.ShowFormulas != nil {
46 view.ShowFormulas = *opts.ShowFormulas
48 if opts.ShowGridLines != nil {
49 view.ShowGridLines = opts.ShowGridLines
51 if opts.ShowRowColHeaders != nil {
52 view.ShowRowColHeaders = opts.ShowRowColHeaders
54 if opts.ShowRuler != nil {
55 view.ShowRuler = opts.ShowRuler
57 if opts.ShowZeros != nil {
58 view.ShowZeros = opts.ShowZeros
60 if opts.TopLeftCell != nil {
61 view.TopLeftCell = *opts.TopLeftCell
64 if inStrSlice([]string{"normal", "pageLayout", "pageBreakPreview"}, *opts.View, true) != -1 {
65 view.View = *opts.View
68 if opts.ZoomScale != nil && *opts.ZoomScale >= 10 && *opts.ZoomScale <= 400 {
69 view.ZoomScale = *opts.ZoomScale
73 // SetSheetView sets sheet view options. The viewIndex may be negative and if
74 // so is counted backward (-1 is the last view).
75 func (f *File) SetSheetView(sheet string, viewIndex int, opts *ViewOptions) error {
76 view, err := f.getSheetView(sheet, viewIndex)
83 view.setSheetView(opts)
87 // GetSheetView gets the value of sheet view options. The viewIndex may be
88 // negative and if so is counted backward (-1 is the last view).
89 func (f *File) GetSheetView(sheet string, viewIndex int) (ViewOptions, error) {
91 DefaultGridColor: boolPtr(true),
92 ShowFormulas: boolPtr(true),
93 ShowGridLines: boolPtr(true),
94 ShowRowColHeaders: boolPtr(true),
95 ShowRuler: boolPtr(true),
96 ShowZeros: boolPtr(true),
97 View: stringPtr("normal"),
98 ZoomScale: float64Ptr(100),
100 view, err := f.getSheetView(sheet, viewIndex)
104 if view.DefaultGridColor != nil {
105 opts.DefaultGridColor = view.DefaultGridColor
107 opts.RightToLeft = boolPtr(view.RightToLeft)
108 opts.ShowFormulas = boolPtr(view.ShowFormulas)
109 if view.ShowGridLines != nil {
110 opts.ShowGridLines = view.ShowGridLines
112 if view.ShowRowColHeaders != nil {
113 opts.ShowRowColHeaders = view.ShowRowColHeaders
115 if view.ShowRuler != nil {
116 opts.ShowRuler = view.ShowRuler
118 if view.ShowZeros != nil {
119 opts.ShowZeros = view.ShowZeros
121 opts.TopLeftCell = stringPtr(view.TopLeftCell)
123 opts.View = stringPtr(view.View)
125 if view.ZoomScale >= 10 && view.ZoomScale <= 400 {
126 opts.ZoomScale = float64Ptr(view.ZoomScale)