page.py 4.9 KB

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