Source code for fastpyxl.chartsheet.chartsheet

# Copyright (c) 2010-2024 fastpyxl


from fastpyxl.descriptors.excel import ExtensionList
from fastpyxl.typed_serialisable.base import Serialisable
from fastpyxl.typed_serialisable.errors import FieldValidationError
from fastpyxl.typed_serialisable.fields import AliasField, Field
from fastpyxl.drawing.spreadsheet_drawing import (
    AbsoluteAnchor,
    SpreadsheetDrawing,
)
from fastpyxl.worksheet.page import (
    PageMargins,
    PrintPageSetup
)
from fastpyxl.worksheet.drawing import Drawing
from fastpyxl.worksheet.header_footer import HeaderFooter
from fastpyxl.workbook.child import _WorkbookChild
from fastpyxl.xml.constants import SHEET_MAIN_NS

from .relation import DrawingHF, SheetBackgroundPicture
from .properties import ChartsheetProperties
from .protection import ChartsheetProtection
from .views import ChartsheetViewList
from .custom import CustomChartsheetViews
from .publish import WebPublishItems


[docs] class Chartsheet(_WorkbookChild, Serialisable): tagname = "chartsheet" _default_title = "Chart" _rel_type = "chartsheet" _path = "/xl/chartsheets/sheet{0}.xml" mime_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml" sheetPr: ChartsheetProperties | None = Field.element(expected_type=ChartsheetProperties, allow_none=True, default=None) sheetViews: ChartsheetViewList | None = Field.element(expected_type=ChartsheetViewList, allow_none=True, default=None) sheetProtection: ChartsheetProtection | None = Field.element(expected_type=ChartsheetProtection, allow_none=True, default=None) customSheetViews: CustomChartsheetViews | None = Field.element(expected_type=CustomChartsheetViews, allow_none=True, default=None) pageMargins: PageMargins | None = Field.element(expected_type=PageMargins, allow_none=True, default=None) pageSetup: PrintPageSetup | None = Field.element(expected_type=PrintPageSetup, allow_none=True, default=None) drawing: Drawing | None = Field.element(expected_type=Drawing, allow_none=True, default=None) drawingHF: DrawingHF | None = Field.element(expected_type=DrawingHF, allow_none=True, default=None) picture: SheetBackgroundPicture | None = Field.element(expected_type=SheetBackgroundPicture, allow_none=True, default=None) webPublishItems: WebPublishItems | None = Field.element(expected_type=WebPublishItems, allow_none=True, default=None) extLst: ExtensionList | None = Field.element(expected_type=ExtensionList, allow_none=True, default=None) headerFooter: HeaderFooter | None = Field.element(expected_type=HeaderFooter, allow_none=True, default=None) HeaderFooter = AliasField('headerFooter', default=None) xml_order = ( 'sheetPr', 'sheetViews', 'sheetProtection', 'customSheetViews', 'pageMargins', 'pageSetup', 'headerFooter', 'drawing', 'drawingHF', 'picture', 'webPublishItems', 'extLst') def __init__(self, sheetPr=None, sheetViews=None, sheetProtection=None, customSheetViews=None, pageMargins=None, pageSetup=None, headerFooter=None, drawing=None, drawingHF=None, picture=None, webPublishItems=None, extLst=None, parent=None, title="", sheet_state='visible', ): super().__init__(parent, title) self._charts = [] self.sheetPr = sheetPr if sheetViews is None: sheetViews = ChartsheetViewList() self.sheetViews = sheetViews self.sheetProtection = sheetProtection self.customSheetViews = customSheetViews self.pageMargins = pageMargins self.pageSetup = pageSetup if headerFooter is not None: self.headerFooter = headerFooter self.drawing = Drawing("rId1") self.drawingHF = drawingHF self.picture = picture self.webPublishItems = webPublishItems self.extLst = extLst if sheet_state not in ('visible', 'hidden', 'veryHidden'): raise FieldValidationError(f"sheet_state rejected value {sheet_state!r}") self.sheet_state = sheet_state
[docs] def add_chart(self, chart): chart.anchor = AbsoluteAnchor() self._charts.append(chart)
[docs] def to_tree(self): self._drawing = SpreadsheetDrawing() self._drawing.charts = self._charts tree = super().to_tree() if not self.headerFooter: el = tree.find('headerFooter') tree.remove(el) tree.set("xmlns", SHEET_MAIN_NS) return tree