page.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. # Copyright (c) 2010-2024 openpyxl
  2. from openpyxl.descriptors.serialisable import Serialisable
  3. from openpyxl.descriptors import (
  4. Float,
  5. Bool,
  6. Integer,
  7. NoneSet,
  8. )
  9. from openpyxl.descriptors.excel import UniversalMeasure, Relation
  10. class PrintPageSetup(Serialisable):
  11. """ Worksheet print page setup """
  12. tagname = "pageSetup"
  13. orientation = NoneSet(values=("default", "portrait", "landscape"))
  14. paperSize = Integer(allow_none=True)
  15. scale = Integer(allow_none=True)
  16. fitToHeight = Integer(allow_none=True)
  17. fitToWidth = Integer(allow_none=True)
  18. firstPageNumber = Integer(allow_none=True)
  19. useFirstPageNumber = Bool(allow_none=True)
  20. paperHeight = UniversalMeasure(allow_none=True)
  21. paperWidth = UniversalMeasure(allow_none=True)
  22. pageOrder = NoneSet(values=("downThenOver", "overThenDown"))
  23. usePrinterDefaults = Bool(allow_none=True)
  24. blackAndWhite = Bool(allow_none=True)
  25. draft = Bool(allow_none=True)
  26. cellComments = NoneSet(values=("asDisplayed", "atEnd"))
  27. errors = NoneSet(values=("displayed", "blank", "dash", "NA"))
  28. horizontalDpi = Integer(allow_none=True)
  29. verticalDpi = Integer(allow_none=True)
  30. copies = Integer(allow_none=True)
  31. id = Relation()
  32. def __init__(self,
  33. worksheet=None,
  34. orientation=None,
  35. paperSize=None,
  36. scale=None,
  37. fitToHeight=None,
  38. fitToWidth=None,
  39. firstPageNumber=None,
  40. useFirstPageNumber=None,
  41. paperHeight=None,
  42. paperWidth=None,
  43. pageOrder=None,
  44. usePrinterDefaults=None,
  45. blackAndWhite=None,
  46. draft=None,
  47. cellComments=None,
  48. errors=None,
  49. horizontalDpi=None,
  50. verticalDpi=None,
  51. copies=None,
  52. id=None):
  53. self._parent = worksheet
  54. self.orientation = orientation
  55. self.paperSize = paperSize
  56. self.scale = scale
  57. self.fitToHeight = fitToHeight
  58. self.fitToWidth = fitToWidth
  59. self.firstPageNumber = firstPageNumber
  60. self.useFirstPageNumber = useFirstPageNumber
  61. self.paperHeight = paperHeight
  62. self.paperWidth = paperWidth
  63. self.pageOrder = pageOrder
  64. self.usePrinterDefaults = usePrinterDefaults
  65. self.blackAndWhite = blackAndWhite
  66. self.draft = draft
  67. self.cellComments = cellComments
  68. self.errors = errors
  69. self.horizontalDpi = horizontalDpi
  70. self.verticalDpi = verticalDpi
  71. self.copies = copies
  72. self.id = id
  73. def __bool__(self):
  74. return bool(dict(self))
  75. @property
  76. def sheet_properties(self):
  77. """
  78. Proxy property
  79. """
  80. return self._parent.sheet_properties.pageSetUpPr
  81. @property
  82. def fitToPage(self):
  83. return self.sheet_properties.fitToPage
  84. @fitToPage.setter
  85. def fitToPage(self, value):
  86. self.sheet_properties.fitToPage = value
  87. @property
  88. def autoPageBreaks(self):
  89. return self.sheet_properties.autoPageBreaks
  90. @autoPageBreaks.setter
  91. def autoPageBreaks(self, value):
  92. self.sheet_properties.autoPageBreaks = value
  93. @classmethod
  94. def from_tree(cls, node):
  95. self = super().from_tree(node)
  96. self.id = None # strip link to binary settings
  97. return self
  98. class PrintOptions(Serialisable):
  99. """ Worksheet print options """
  100. tagname = "printOptions"
  101. horizontalCentered = Bool(allow_none=True)
  102. verticalCentered = Bool(allow_none=True)
  103. headings = Bool(allow_none=True)
  104. gridLines = Bool(allow_none=True)
  105. gridLinesSet = Bool(allow_none=True)
  106. def __init__(self, horizontalCentered=None,
  107. verticalCentered=None,
  108. headings=None,
  109. gridLines=None,
  110. gridLinesSet=None,
  111. ):
  112. self.horizontalCentered = horizontalCentered
  113. self.verticalCentered = verticalCentered
  114. self.headings = headings
  115. self.gridLines = gridLines
  116. self.gridLinesSet = gridLinesSet
  117. def __bool__(self):
  118. return bool(dict(self))
  119. class PageMargins(Serialisable):
  120. """
  121. Information about page margins for view/print layouts.
  122. Standard values (in inches)
  123. left, right = 0.75
  124. top, bottom = 1
  125. header, footer = 0.5
  126. """
  127. tagname = "pageMargins"
  128. left = Float()
  129. right = Float()
  130. top = Float()
  131. bottom = Float()
  132. header = Float()
  133. footer = Float()
  134. def __init__(self, left=0.75, right=0.75, top=1, bottom=1, header=0.5,
  135. footer=0.5):
  136. self.left = left
  137. self.right = right
  138. self.top = top
  139. self.bottom = bottom
  140. self.header = header
  141. self.footer = footer