chartsheet.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. from __future__ import absolute_import
  2. # Copyright (c) 2010-2019 openpyxl
  3. from weakref import ref
  4. from openpyxl.descriptors import Typed, Set, Alias
  5. from openpyxl.descriptors.excel import ExtensionList
  6. from openpyxl.descriptors.serialisable import Serialisable
  7. from openpyxl.drawing.spreadsheet_drawing import (
  8. AbsoluteAnchor,
  9. SpreadsheetDrawing,
  10. )
  11. from openpyxl.worksheet.page import (
  12. PageMargins,
  13. PrintPageSetup
  14. )
  15. from openpyxl.packaging.relationship import Relationship, RelationshipList
  16. from openpyxl.worksheet.drawing import Drawing
  17. from openpyxl.worksheet.header_footer import HeaderFooter
  18. from openpyxl.workbook.child import _WorkbookChild
  19. from openpyxl.xml.constants import SHEET_MAIN_NS, REL_NS
  20. from .relation import DrawingHF, SheetBackgroundPicture
  21. from .properties import ChartsheetProperties
  22. from .protection import ChartsheetProtection
  23. from .views import ChartsheetViewList
  24. from .custom import CustomChartsheetViews
  25. from .publish import WebPublishItems
  26. class Chartsheet(_WorkbookChild, Serialisable):
  27. tagname = "chartsheet"
  28. _default_title = "Chart"
  29. _rel_type = "chartsheet"
  30. _path = "/xl/chartsheets/sheet{0}.xml"
  31. mime_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml"
  32. sheetPr = Typed(expected_type=ChartsheetProperties, allow_none=True)
  33. sheetViews = Typed(expected_type=ChartsheetViewList)
  34. sheetProtection = Typed(expected_type=ChartsheetProtection, allow_none=True)
  35. customSheetViews = Typed(expected_type=CustomChartsheetViews, allow_none=True)
  36. pageMargins = Typed(expected_type=PageMargins, allow_none=True)
  37. pageSetup = Typed(expected_type=PrintPageSetup, allow_none=True)
  38. drawing = Typed(expected_type=Drawing, allow_none=True)
  39. drawingHF = Typed(expected_type=DrawingHF, allow_none=True)
  40. picture = Typed(expected_type=SheetBackgroundPicture, allow_none=True)
  41. webPublishItems = Typed(expected_type=WebPublishItems, allow_none=True)
  42. extLst = Typed(expected_type=ExtensionList, allow_none=True)
  43. sheet_state = Set(values=('visible', 'hidden', 'veryHidden'))
  44. headerFooter = Typed(expected_type=HeaderFooter)
  45. HeaderFooter = Alias('headerFooter')
  46. __elements__ = (
  47. 'sheetPr', 'sheetViews', 'sheetProtection', 'customSheetViews',
  48. 'pageMargins', 'pageSetup', 'headerFooter', 'drawing', 'drawingHF',
  49. 'picture', 'webPublishItems')
  50. __attrs__ = ()
  51. def __init__(self,
  52. sheetPr=None,
  53. sheetViews=None,
  54. sheetProtection=None,
  55. customSheetViews=None,
  56. pageMargins=None,
  57. pageSetup=None,
  58. headerFooter=None,
  59. drawing=None,
  60. drawingHF=None,
  61. picture=None,
  62. webPublishItems=None,
  63. extLst=None,
  64. parent=None,
  65. title="",
  66. sheet_state='visible',
  67. ):
  68. super(Chartsheet, self).__init__(parent, title)
  69. self._charts = []
  70. self.sheetPr = sheetPr
  71. if sheetViews is None:
  72. sheetViews = ChartsheetViewList()
  73. self.sheetViews = sheetViews
  74. self.sheetProtection = sheetProtection
  75. self.customSheetViews = customSheetViews
  76. self.pageMargins = pageMargins
  77. self.pageSetup = pageSetup
  78. if headerFooter is not None:
  79. self.headerFooter = headerFooter
  80. self.drawing = Drawing("rId1")
  81. self.drawingHF = drawingHF
  82. self.picture = picture
  83. self.webPublishItems = webPublishItems
  84. self.sheet_state = sheet_state
  85. def add_chart(self, chart):
  86. chart.anchor = AbsoluteAnchor()
  87. self._charts.append(chart)
  88. def to_tree(self):
  89. self._drawing = SpreadsheetDrawing()
  90. self._drawing.charts = self._charts
  91. tree = super(Chartsheet, self).to_tree()
  92. if not self.headerFooter:
  93. el = tree.find('headerFooter')
  94. tree.remove(el)
  95. tree.set("xmlns", SHEET_MAIN_NS)
  96. return tree