sheetview.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. // Copyright 2016 - 2023 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.16 or later.
  11. package excelize
  12. // getSheetView returns the SheetView object
  13. func (f *File) getSheetView(sheet string, viewIndex int) (*xlsxSheetView, error) {
  14. ws, err := f.workSheetReader(sheet)
  15. if err != nil {
  16. return nil, err
  17. }
  18. if ws.SheetViews == nil {
  19. ws.SheetViews = &xlsxSheetViews{
  20. SheetView: []xlsxSheetView{{WorkbookViewID: 0}},
  21. }
  22. }
  23. if viewIndex < 0 {
  24. if viewIndex < -len(ws.SheetViews.SheetView) {
  25. return nil, newViewIdxError(viewIndex)
  26. }
  27. viewIndex = len(ws.SheetViews.SheetView) + viewIndex
  28. } else if viewIndex >= len(ws.SheetViews.SheetView) {
  29. return nil, newViewIdxError(viewIndex)
  30. }
  31. return &(ws.SheetViews.SheetView[viewIndex]), err
  32. }
  33. // setSheetView set sheet view by given options.
  34. func (view *xlsxSheetView) setSheetView(opts *ViewOptions) {
  35. if opts.DefaultGridColor != nil {
  36. view.DefaultGridColor = opts.DefaultGridColor
  37. }
  38. if opts.RightToLeft != nil {
  39. view.RightToLeft = *opts.RightToLeft
  40. }
  41. if opts.ShowFormulas != nil {
  42. view.ShowFormulas = *opts.ShowFormulas
  43. }
  44. if opts.ShowGridLines != nil {
  45. view.ShowGridLines = opts.ShowGridLines
  46. }
  47. if opts.ShowRowColHeaders != nil {
  48. view.ShowRowColHeaders = opts.ShowRowColHeaders
  49. }
  50. if opts.ShowRuler != nil {
  51. view.ShowRuler = opts.ShowRuler
  52. }
  53. if opts.ShowZeros != nil {
  54. view.ShowZeros = opts.ShowZeros
  55. }
  56. if opts.TopLeftCell != nil {
  57. view.TopLeftCell = *opts.TopLeftCell
  58. }
  59. if opts.View != nil {
  60. if _, ok := map[string]interface{}{
  61. "normal": nil,
  62. "pageLayout": nil,
  63. "pageBreakPreview": nil,
  64. }[*opts.View]; ok {
  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. // SetSheetView sets sheet view options. The viewIndex may be negative and if
  73. // so is counted backward (-1 is the last view).
  74. func (f *File) SetSheetView(sheet string, viewIndex int, opts *ViewOptions) error {
  75. view, err := f.getSheetView(sheet, viewIndex)
  76. if err != nil {
  77. return err
  78. }
  79. if opts == nil {
  80. return err
  81. }
  82. view.setSheetView(opts)
  83. return nil
  84. }
  85. // GetSheetView gets the value of sheet view options. The viewIndex may be
  86. // negative and if so is counted backward (-1 is the last view).
  87. func (f *File) GetSheetView(sheet string, viewIndex int) (ViewOptions, error) {
  88. opts := ViewOptions{
  89. DefaultGridColor: boolPtr(true),
  90. ShowFormulas: boolPtr(true),
  91. ShowGridLines: boolPtr(true),
  92. ShowRowColHeaders: boolPtr(true),
  93. ShowRuler: boolPtr(true),
  94. ShowZeros: boolPtr(true),
  95. View: stringPtr("normal"),
  96. ZoomScale: float64Ptr(100),
  97. }
  98. view, err := f.getSheetView(sheet, viewIndex)
  99. if err != nil {
  100. return opts, err
  101. }
  102. if view.DefaultGridColor != nil {
  103. opts.DefaultGridColor = view.DefaultGridColor
  104. }
  105. opts.RightToLeft = boolPtr(view.RightToLeft)
  106. opts.ShowFormulas = boolPtr(view.ShowFormulas)
  107. if view.ShowGridLines != nil {
  108. opts.ShowGridLines = view.ShowGridLines
  109. }
  110. if view.ShowRowColHeaders != nil {
  111. opts.ShowRowColHeaders = view.ShowRowColHeaders
  112. }
  113. if view.ShowRuler != nil {
  114. opts.ShowRuler = view.ShowRuler
  115. }
  116. if view.ShowZeros != nil {
  117. opts.ShowZeros = view.ShowZeros
  118. }
  119. opts.TopLeftCell = stringPtr(view.TopLeftCell)
  120. if view.View != "" {
  121. opts.View = stringPtr(view.View)
  122. }
  123. if view.ZoomScale >= 10 && view.ZoomScale <= 400 {
  124. opts.ZoomScale = float64Ptr(view.ZoomScale)
  125. }
  126. return opts, err
  127. }