OSDN Git Service

Add unit test for the stream writer to improved line of code coverage (#1898)
[excelize/excelize.git] / sheetview.go
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
3 // the LICENSE file.
4 //
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.
11
12 package excelize
13
14 // getSheetView returns the SheetView object
15 func (f *File) getSheetView(sheet string, viewIndex int) (*xlsxSheetView, error) {
16         ws, err := f.workSheetReader(sheet)
17         if err != nil {
18                 return nil, err
19         }
20         if ws.SheetViews == nil {
21                 ws.SheetViews = &xlsxSheetViews{
22                         SheetView: []xlsxSheetView{{WorkbookViewID: 0}},
23                 }
24         }
25         if viewIndex < 0 {
26                 if viewIndex < -len(ws.SheetViews.SheetView) {
27                         return nil, newViewIdxError(viewIndex)
28                 }
29                 viewIndex = len(ws.SheetViews.SheetView) + viewIndex
30         } else if viewIndex >= len(ws.SheetViews.SheetView) {
31                 return nil, newViewIdxError(viewIndex)
32         }
33
34         return &(ws.SheetViews.SheetView[viewIndex]), err
35 }
36
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
41         }
42         if opts.RightToLeft != nil {
43                 view.RightToLeft = *opts.RightToLeft
44         }
45         if opts.ShowFormulas != nil {
46                 view.ShowFormulas = *opts.ShowFormulas
47         }
48         if opts.ShowGridLines != nil {
49                 view.ShowGridLines = opts.ShowGridLines
50         }
51         if opts.ShowRowColHeaders != nil {
52                 view.ShowRowColHeaders = opts.ShowRowColHeaders
53         }
54         if opts.ShowRuler != nil {
55                 view.ShowRuler = opts.ShowRuler
56         }
57         if opts.ShowZeros != nil {
58                 view.ShowZeros = opts.ShowZeros
59         }
60         if opts.TopLeftCell != nil {
61                 view.TopLeftCell = *opts.TopLeftCell
62         }
63         if opts.View != nil {
64                 if inStrSlice([]string{"normal", "pageLayout", "pageBreakPreview"}, *opts.View, true) != -1 {
65                         view.View = *opts.View
66                 }
67         }
68         if opts.ZoomScale != nil && *opts.ZoomScale >= 10 && *opts.ZoomScale <= 400 {
69                 view.ZoomScale = *opts.ZoomScale
70         }
71 }
72
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)
77         if err != nil {
78                 return err
79         }
80         if opts == nil {
81                 return err
82         }
83         view.setSheetView(opts)
84         return nil
85 }
86
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) {
90         opts := ViewOptions{
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),
99         }
100         view, err := f.getSheetView(sheet, viewIndex)
101         if err != nil {
102                 return opts, err
103         }
104         if view.DefaultGridColor != nil {
105                 opts.DefaultGridColor = view.DefaultGridColor
106         }
107         opts.RightToLeft = boolPtr(view.RightToLeft)
108         opts.ShowFormulas = boolPtr(view.ShowFormulas)
109         if view.ShowGridLines != nil {
110                 opts.ShowGridLines = view.ShowGridLines
111         }
112         if view.ShowRowColHeaders != nil {
113                 opts.ShowRowColHeaders = view.ShowRowColHeaders
114         }
115         if view.ShowRuler != nil {
116                 opts.ShowRuler = view.ShowRuler
117         }
118         if view.ShowZeros != nil {
119                 opts.ShowZeros = view.ShowZeros
120         }
121         opts.TopLeftCell = stringPtr(view.TopLeftCell)
122         if view.View != "" {
123                 opts.View = stringPtr(view.View)
124         }
125         if view.ZoomScale >= 10 && view.ZoomScale <= 400 {
126                 opts.ZoomScale = float64Ptr(view.ZoomScale)
127         }
128         return opts, err
129 }