############################################################################### # # Metadata - A class for writing the Excel XLSX Metadata file. # # SPDX-License-Identifier: BSD-2-Clause # Copyright 2013-2022, John McNamara, jmcnamara@cpan.org # from . import xmlwriter class Metadata(xmlwriter.XMLwriter): """ A class for writing the Excel XLSX Metadata file. """ ########################################################################### # # Public API. # ########################################################################### def __init__(self): """ Constructor. """ super(Metadata, self).__init__() ########################################################################### # # Private API. # ########################################################################### def _assemble_xml_file(self): # Assemble and write the XML file. # Write the XML declaration. self._xml_declaration() # Write the metadata element. self._write_metadata() # Write the metadataTypes element. self._write_metadata_types() # Write the futureMetadata element. self._write_future_metadata() # Write the cellMetadata element. self._write_cell_metadata() self._xml_end_tag('metadata') # Close the file. self._xml_close() ########################################################################### # # XML methods. # ########################################################################### def _write_metadata(self): # Write the element. xmlns = 'http://schemas.openxmlformats.org/spreadsheetml/2006/main' schema = 'http://schemas.microsoft.com/office' xmlns_xda = schema + '/spreadsheetml/2017/dynamicarray' attributes = [ ('xmlns', xmlns), ('xmlns:xda', xmlns_xda), ] self._xml_start_tag('metadata', attributes) def _write_metadata_types(self): # Write the element. attributes = [('count', 1)] self._xml_start_tag('metadataTypes', attributes) # Write the metadataType element. self._write_metadata_type() self._xml_end_tag('metadataTypes') def _write_metadata_type(self): # Write the element. attributes = [ ('name', 'XLDAPR'), ('minSupportedVersion', 120000), ('copy', 1), ('pasteAll', 1), ('pasteValues', 1), ('merge', 1), ('splitFirst', 1), ('rowColShift', 1), ('clearFormats', 1), ('clearComments', 1), ('assign', 1), ('coerce', 1), ('cellMeta', 1), ] self._xml_empty_tag('metadataType', attributes) def _write_future_metadata(self): # Write the element. attributes = [ ('name', 'XLDAPR'), ('count', 1), ] self._xml_start_tag('futureMetadata', attributes) self._xml_start_tag('bk') self._xml_start_tag('extLst') # Write the ext element. self._write_ext() self._xml_end_tag('extLst') self._xml_end_tag('bk') self._xml_end_tag('futureMetadata') def _write_ext(self): # Write the element. attributes = [('uri', '{bdbb8cdc-fa1e-496e-a857-3c3f30c029c3}')] self._xml_start_tag('ext', attributes) # Write the xda:dynamicArrayProperties element. self._write_xda_dynamic_array_properties() self._xml_end_tag('ext') def _write_xda_dynamic_array_properties(self): # Write the element. attributes = [ ('fDynamic', 1), ('fCollapsed', 0), ] self._xml_empty_tag('xda:dynamicArrayProperties', attributes) def _write_cell_metadata(self): # Write the element. attributes = [('count', 1)] self._xml_start_tag('cellMetadata', attributes) self._xml_start_tag('bk') # Write the rc element. self._write_rc() self._xml_end_tag('bk') self._xml_end_tag('cellMetadata') def _write_rc(self): # Write the element. attributes = [ ('t', 1), ('v', 0), ] self._xml_empty_tag('rc', attributes)