sheetview.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. package excelize
  2. import "fmt"
  3. // SheetViewOption is an option of a view of a worksheet. See SetSheetViewOptions().
  4. type SheetViewOption interface {
  5. setSheetViewOption(view *xlsxSheetView)
  6. }
  7. // SheetViewOptionPtr is a writable SheetViewOption. See GetSheetViewOptions().
  8. type SheetViewOptionPtr interface {
  9. SheetViewOption
  10. getSheetViewOption(view *xlsxSheetView)
  11. }
  12. type (
  13. // DefaultGridColor is a SheetViewOption.
  14. DefaultGridColor bool
  15. // RightToLeft is a SheetViewOption.
  16. RightToLeft bool
  17. // ShowFormulas is a SheetViewOption.
  18. ShowFormulas bool
  19. // ShowGridLines is a SheetViewOption.
  20. ShowGridLines bool
  21. // ShowRowColHeaders is a SheetViewOption.
  22. ShowRowColHeaders bool
  23. /* TODO
  24. // ShowWhiteSpace is a SheetViewOption.
  25. ShowWhiteSpace bool
  26. // ShowZeros is a SheetViewOption.
  27. ShowZeros bool
  28. // WindowProtection is a SheetViewOption.
  29. WindowProtection bool
  30. */
  31. )
  32. // Defaults for each option are described in XML schema for CT_SheetView
  33. func (o DefaultGridColor) setSheetViewOption(view *xlsxSheetView) {
  34. view.DefaultGridColor = boolPtr(bool(o))
  35. }
  36. func (o *DefaultGridColor) getSheetViewOption(view *xlsxSheetView) {
  37. *o = DefaultGridColor(defaultTrue(view.DefaultGridColor)) // Excel default: true
  38. }
  39. func (o RightToLeft) setSheetViewOption(view *xlsxSheetView) {
  40. view.RightToLeft = bool(o) // Excel default: false
  41. }
  42. func (o *RightToLeft) getSheetViewOption(view *xlsxSheetView) {
  43. *o = RightToLeft(view.RightToLeft)
  44. }
  45. func (o ShowFormulas) setSheetViewOption(view *xlsxSheetView) {
  46. view.ShowFormulas = bool(o) // Excel default: false
  47. }
  48. func (o *ShowFormulas) getSheetViewOption(view *xlsxSheetView) {
  49. *o = ShowFormulas(view.ShowFormulas) // Excel default: false
  50. }
  51. func (o ShowGridLines) setSheetViewOption(view *xlsxSheetView) {
  52. view.ShowGridLines = boolPtr(bool(o))
  53. }
  54. func (o *ShowGridLines) getSheetViewOption(view *xlsxSheetView) {
  55. *o = ShowGridLines(defaultTrue(view.ShowGridLines)) // Excel default: true
  56. }
  57. func (o ShowRowColHeaders) setSheetViewOption(view *xlsxSheetView) {
  58. view.ShowRowColHeaders = boolPtr(bool(o))
  59. }
  60. func (o *ShowRowColHeaders) getSheetViewOption(view *xlsxSheetView) {
  61. *o = ShowRowColHeaders(defaultTrue(view.ShowRowColHeaders)) // Excel default: true
  62. }
  63. // getSheetView returns the SheetView object
  64. func (f *File) getSheetView(sheetName string, viewIndex int) (*xlsxSheetView, error) {
  65. xlsx := f.workSheetReader(sheetName)
  66. if viewIndex < 0 {
  67. if viewIndex < -len(xlsx.SheetViews.SheetView) {
  68. return nil, fmt.Errorf("view index %d out of range", viewIndex)
  69. }
  70. viewIndex = len(xlsx.SheetViews.SheetView) + viewIndex
  71. } else if viewIndex >= len(xlsx.SheetViews.SheetView) {
  72. return nil, fmt.Errorf("view index %d out of range", viewIndex)
  73. }
  74. return &(xlsx.SheetViews.SheetView[viewIndex]), nil
  75. }
  76. // SetSheetViewOptions sets sheet view options.
  77. // The viewIndex may be negative and if so is counted backward (-1 is the last view).
  78. //
  79. // Available options:
  80. // DefaultGridColor(bool)
  81. // RightToLeft(bool)
  82. // ShowFormulas(bool)
  83. // ShowGridLines(bool)
  84. // ShowRowColHeaders(bool)
  85. // Example:
  86. // err = f.SetSheetViewOptions("Sheet1", -1, ShowGridLines(false))
  87. func (f *File) SetSheetViewOptions(name string, viewIndex int, opts ...SheetViewOption) error {
  88. view, err := f.getSheetView(name, viewIndex)
  89. if err != nil {
  90. return err
  91. }
  92. for _, opt := range opts {
  93. opt.setSheetViewOption(view)
  94. }
  95. return nil
  96. }
  97. // GetSheetViewOptions gets the value of sheet view options.
  98. // The viewIndex may be negative and if so is counted backward (-1 is the last view).
  99. //
  100. // Available options:
  101. // DefaultGridColor(bool)
  102. // RightToLeft(bool)
  103. // ShowFormulas(bool)
  104. // ShowGridLines(bool)
  105. // ShowRowColHeaders(bool)
  106. // Example:
  107. // var showGridLines excelize.ShowGridLines
  108. // err = f.GetSheetViewOptions("Sheet1", -1, &showGridLines)
  109. func (f *File) GetSheetViewOptions(name string, viewIndex int, opts ...SheetViewOptionPtr) error {
  110. view, err := f.getSheetView(name, viewIndex)
  111. if err != nil {
  112. return err
  113. }
  114. for _, opt := range opts {
  115. opt.getSheetViewOption(view)
  116. }
  117. return nil
  118. }