2024-12-04 13:35:57 +05:00

175 lines
4.8 KiB
Python

# Copyright (c) 2010-2024 openpyxl
from openpyxl.descriptors.serialisable import Serialisable
from openpyxl.descriptors import (
Float,
Bool,
Integer,
NoneSet,
)
from openpyxl.descriptors.excel import UniversalMeasure, Relation
class PrintPageSetup(Serialisable):
""" Worksheet print page setup """
tagname = "pageSetup"
orientation = NoneSet(values=("default", "portrait", "landscape"))
paperSize = Integer(allow_none=True)
scale = Integer(allow_none=True)
fitToHeight = Integer(allow_none=True)
fitToWidth = Integer(allow_none=True)
firstPageNumber = Integer(allow_none=True)
useFirstPageNumber = Bool(allow_none=True)
paperHeight = UniversalMeasure(allow_none=True)
paperWidth = UniversalMeasure(allow_none=True)
pageOrder = NoneSet(values=("downThenOver", "overThenDown"))
usePrinterDefaults = Bool(allow_none=True)
blackAndWhite = Bool(allow_none=True)
draft = Bool(allow_none=True)
cellComments = NoneSet(values=("asDisplayed", "atEnd"))
errors = NoneSet(values=("displayed", "blank", "dash", "NA"))
horizontalDpi = Integer(allow_none=True)
verticalDpi = Integer(allow_none=True)
copies = Integer(allow_none=True)
id = Relation()
def __init__(self,
worksheet=None,
orientation=None,
paperSize=None,
scale=None,
fitToHeight=None,
fitToWidth=None,
firstPageNumber=None,
useFirstPageNumber=None,
paperHeight=None,
paperWidth=None,
pageOrder=None,
usePrinterDefaults=None,
blackAndWhite=None,
draft=None,
cellComments=None,
errors=None,
horizontalDpi=None,
verticalDpi=None,
copies=None,
id=None):
self._parent = worksheet
self.orientation = orientation
self.paperSize = paperSize
self.scale = scale
self.fitToHeight = fitToHeight
self.fitToWidth = fitToWidth
self.firstPageNumber = firstPageNumber
self.useFirstPageNumber = useFirstPageNumber
self.paperHeight = paperHeight
self.paperWidth = paperWidth
self.pageOrder = pageOrder
self.usePrinterDefaults = usePrinterDefaults
self.blackAndWhite = blackAndWhite
self.draft = draft
self.cellComments = cellComments
self.errors = errors
self.horizontalDpi = horizontalDpi
self.verticalDpi = verticalDpi
self.copies = copies
self.id = id
def __bool__(self):
return bool(dict(self))
@property
def sheet_properties(self):
"""
Proxy property
"""
return self._parent.sheet_properties.pageSetUpPr
@property
def fitToPage(self):
return self.sheet_properties.fitToPage
@fitToPage.setter
def fitToPage(self, value):
self.sheet_properties.fitToPage = value
@property
def autoPageBreaks(self):
return self.sheet_properties.autoPageBreaks
@autoPageBreaks.setter
def autoPageBreaks(self, value):
self.sheet_properties.autoPageBreaks = value
@classmethod
def from_tree(cls, node):
self = super().from_tree(node)
self.id = None # strip link to binary settings
return self
class PrintOptions(Serialisable):
""" Worksheet print options """
tagname = "printOptions"
horizontalCentered = Bool(allow_none=True)
verticalCentered = Bool(allow_none=True)
headings = Bool(allow_none=True)
gridLines = Bool(allow_none=True)
gridLinesSet = Bool(allow_none=True)
def __init__(self, horizontalCentered=None,
verticalCentered=None,
headings=None,
gridLines=None,
gridLinesSet=None,
):
self.horizontalCentered = horizontalCentered
self.verticalCentered = verticalCentered
self.headings = headings
self.gridLines = gridLines
self.gridLinesSet = gridLinesSet
def __bool__(self):
return bool(dict(self))
class PageMargins(Serialisable):
"""
Information about page margins for view/print layouts.
Standard values (in inches)
left, right = 0.75
top, bottom = 1
header, footer = 0.5
"""
tagname = "pageMargins"
left = Float()
right = Float()
top = Float()
bottom = Float()
header = Float()
footer = Float()
def __init__(self, left=0.75, right=0.75, top=1, bottom=1, header=0.5,
footer=0.5):
self.left = left
self.right = right
self.top = top
self.bottom = bottom
self.header = header
self.footer = footer