extended.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. # Copyright (c) 2010-2024 openpyxl
  2. from openpyxl.descriptors.serialisable import Serialisable
  3. from openpyxl.descriptors import (
  4. Typed,
  5. )
  6. from openpyxl.descriptors.nested import (
  7. NestedText,
  8. )
  9. from openpyxl.xml.constants import XPROPS_NS
  10. from openpyxl import __version__
  11. class DigSigBlob(Serialisable):
  12. __elements__ = __attrs__ = ()
  13. class VectorLpstr(Serialisable):
  14. __elements__ = __attrs__ = ()
  15. class VectorVariant(Serialisable):
  16. __elements__ = __attrs__ = ()
  17. class ExtendedProperties(Serialisable):
  18. """
  19. See 22.2
  20. Most of this is irrelevant but Excel is very picky about the version number
  21. It uses XX.YYYY (Version.Build) and expects everyone else to
  22. We provide Major.Minor and the full version in the application name
  23. """
  24. tagname = "Properties"
  25. Template = NestedText(expected_type=str, allow_none=True)
  26. Manager = NestedText(expected_type=str, allow_none=True)
  27. Company = NestedText(expected_type=str, allow_none=True)
  28. Pages = NestedText(expected_type=int, allow_none=True)
  29. Words = NestedText(expected_type=int,allow_none=True)
  30. Characters = NestedText(expected_type=int, allow_none=True)
  31. PresentationFormat = NestedText(expected_type=str, allow_none=True)
  32. Lines = NestedText(expected_type=int, allow_none=True)
  33. Paragraphs = NestedText(expected_type=int, allow_none=True)
  34. Slides = NestedText(expected_type=int, allow_none=True)
  35. Notes = NestedText(expected_type=int, allow_none=True)
  36. TotalTime = NestedText(expected_type=int, allow_none=True)
  37. HiddenSlides = NestedText(expected_type=int, allow_none=True)
  38. MMClips = NestedText(expected_type=int, allow_none=True)
  39. ScaleCrop = NestedText(expected_type=bool, allow_none=True)
  40. HeadingPairs = Typed(expected_type=VectorVariant, allow_none=True)
  41. TitlesOfParts = Typed(expected_type=VectorLpstr, allow_none=True)
  42. LinksUpToDate = NestedText(expected_type=bool, allow_none=True)
  43. CharactersWithSpaces = NestedText(expected_type=int, allow_none=True)
  44. SharedDoc = NestedText(expected_type=bool, allow_none=True)
  45. HyperlinkBase = NestedText(expected_type=str, allow_none=True)
  46. HLinks = Typed(expected_type=VectorVariant, allow_none=True)
  47. HyperlinksChanged = NestedText(expected_type=bool, allow_none=True)
  48. DigSig = Typed(expected_type=DigSigBlob, allow_none=True)
  49. Application = NestedText(expected_type=str, allow_none=True)
  50. AppVersion = NestedText(expected_type=str, allow_none=True)
  51. DocSecurity = NestedText(expected_type=int, allow_none=True)
  52. __elements__ = ('Application', 'AppVersion', 'DocSecurity', 'ScaleCrop',
  53. 'LinksUpToDate', 'SharedDoc', 'HyperlinksChanged')
  54. def __init__(self,
  55. Template=None,
  56. Manager=None,
  57. Company=None,
  58. Pages=None,
  59. Words=None,
  60. Characters=None,
  61. PresentationFormat=None,
  62. Lines=None,
  63. Paragraphs=None,
  64. Slides=None,
  65. Notes=None,
  66. TotalTime=None,
  67. HiddenSlides=None,
  68. MMClips=None,
  69. ScaleCrop=None,
  70. HeadingPairs=None,
  71. TitlesOfParts=None,
  72. LinksUpToDate=None,
  73. CharactersWithSpaces=None,
  74. SharedDoc=None,
  75. HyperlinkBase=None,
  76. HLinks=None,
  77. HyperlinksChanged=None,
  78. DigSig=None,
  79. Application=None,
  80. AppVersion=None,
  81. DocSecurity=None,
  82. ):
  83. self.Template = Template
  84. self.Manager = Manager
  85. self.Company = Company
  86. self.Pages = Pages
  87. self.Words = Words
  88. self.Characters = Characters
  89. self.PresentationFormat = PresentationFormat
  90. self.Lines = Lines
  91. self.Paragraphs = Paragraphs
  92. self.Slides = Slides
  93. self.Notes = Notes
  94. self.TotalTime = TotalTime
  95. self.HiddenSlides = HiddenSlides
  96. self.MMClips = MMClips
  97. self.ScaleCrop = ScaleCrop
  98. self.HeadingPairs = None
  99. self.TitlesOfParts = None
  100. self.LinksUpToDate = LinksUpToDate
  101. self.CharactersWithSpaces = CharactersWithSpaces
  102. self.SharedDoc = SharedDoc
  103. self.HyperlinkBase = HyperlinkBase
  104. self.HLinks = None
  105. self.HyperlinksChanged = HyperlinksChanged
  106. self.DigSig = None
  107. self.Application = f"Microsoft Excel Compatible / Openpyxl {__version__}"
  108. self.AppVersion = ".".join(__version__.split(".")[:-1])
  109. self.DocSecurity = DocSecurity
  110. def to_tree(self):
  111. tree = super().to_tree()
  112. tree.set("xmlns", XPROPS_NS)
  113. return tree