Source code for fastpyxl.worksheet.page

# Copyright (c) 2010-2024 fastpyxl

from fastpyxl.typed_serialisable.base import Serialisable
from fastpyxl.typed_serialisable.errors import FieldValidationError
from fastpyxl.typed_serialisable.fields import Field
from fastpyxl.xml.constants import REL_NS


[docs] class PrintPageSetup(Serialisable): """ Worksheet print page setup """ tagname = "pageSetup" orientation: str | None = Field.attribute(expected_type=str, allow_none=True, converter=lambda v: _enum(v, ("default", "portrait", "landscape"), "orientation"), default=None) paperSize: int | None = Field.attribute(expected_type=int, allow_none=True, default=None) scale: int | None = Field.attribute(expected_type=int, allow_none=True, default=None) fitToHeight: int | None = Field.attribute(expected_type=int, allow_none=True, default=None) fitToWidth: int | None = Field.attribute(expected_type=int, allow_none=True, default=None) firstPageNumber: int | None = Field.attribute(expected_type=int, allow_none=True, default=None) useFirstPageNumber: bool | None = Field.attribute(expected_type=bool, allow_none=True, default=None) paperHeight: str | None = Field.attribute(expected_type=str, allow_none=True, default=None) paperWidth: str | None = Field.attribute(expected_type=str, allow_none=True, default=None) pageOrder: str | None = Field.attribute(expected_type=str, allow_none=True, converter=lambda v: _enum(v, ("downThenOver", "overThenDown"), "pageOrder"), default=None) usePrinterDefaults: bool | None = Field.attribute(expected_type=bool, allow_none=True, default=None) blackAndWhite: bool | None = Field.attribute(expected_type=bool, allow_none=True, default=None) draft: bool | None = Field.attribute(expected_type=bool, allow_none=True, default=None) cellComments: str | None = Field.attribute(expected_type=str, allow_none=True, converter=lambda v: _enum(v, ("asDisplayed", "atEnd", "none"), "cellComments"), default=None) errors: str | None = Field.attribute(expected_type=str, allow_none=True, converter=lambda v: _enum(v, ("displayed", "blank", "dash", "NA"), "errors"), default=None) horizontalDpi: int | None = Field.attribute(expected_type=int, allow_none=True, default=None) verticalDpi: int | None = Field.attribute(expected_type=int, allow_none=True, default=None) copies: int | None = Field.attribute(expected_type=int, allow_none=True, default=None) id: str | None = Field.attribute(expected_type=str, allow_none=True, namespace=REL_NS, default=None) 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 """ parent = self._parent assert parent is not None return 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
[docs] @classmethod def from_tree(cls, node): self = super().from_tree(node) self.id = None # strip link to binary settings return self
[docs] class PrintOptions(Serialisable): """ Worksheet print options """ tagname = "printOptions" horizontalCentered: bool | None = Field.attribute(expected_type=bool, allow_none=True, default=None) verticalCentered: bool | None = Field.attribute(expected_type=bool, allow_none=True, default=None) headings: bool | None = Field.attribute(expected_type=bool, allow_none=True, default=None) gridLines: bool | None = Field.attribute(expected_type=bool, allow_none=True, default=None) gridLinesSet: bool | None = Field.attribute(expected_type=bool, allow_none=True, default=None) 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))
[docs] 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 | None = Field.attribute(expected_type=float, allow_none=True, default=0.75) right: float | None = Field.attribute(expected_type=float, allow_none=True, default=0.75) top: float | None = Field.attribute(expected_type=float, allow_none=True, default=1) bottom: float | None = Field.attribute(expected_type=float, allow_none=True, default=1) header: float | None = Field.attribute(expected_type=float, allow_none=True, default=0.5) footer: float | None = Field.attribute(expected_type=float, allow_none=True, default=0.5) 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
def _enum(value, allowed, field_name): if value is None: return None if value not in allowed: raise FieldValidationError(f"{field_name} rejected value {value!r}") return value