'''Created Jan 25, 2022 Levi''' from collections import defaultdict import xlsxwriter as xlsw from lxml import etree as ET from declarations.declaration import Declaration class D100(Declaration): def __init__(self): super().__init__() def from_xml(self, fp): self.obligs = [] xml = ET.parse(fp) root = xml.getroot() def_root = defaultdict(lambda: 0) def_root.update(root.attrib) self.def_root = def_root self.cui = def_root['cui'] self.den = def_root['den'] self.month = int(def_root['luna']) self.year = int(def_root['an']) self.root = root self.decl_type = self.root.tag.split("}", 1)[-1] # print(root.nsmap) self.tree = xml.xpath('/x:declaratie100/*', namespaces={'x': 'mfp:anaf:dgti:d100:declaratie:v2'}) for oblig in self.tree: print(oblig.attrib) self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['cod_oblig'])) self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['cota'])) self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_dat'])) self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_ded'])) self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_plata'])) self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_rest'])) self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_bonif'])) self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_spons'])) self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_AMEF'])) # print(self.obligs) return self @property def data(self): data = { self.cui: [ self.den, self.month, self.year, ] } self.dict_data = data return self.dict_data def to_xlsx(self, xl_name, w_sheet_name, files, headers=[], **kwargs): book = xlsw.Workbook(xl_name + '.xlsm') book.add_vba_project('./vbaProject.bin') sheet = book.add_worksheet(w_sheet_name) # sheet2 = book.add_worksheet('all') row, row2, col = 1, 1, 0 headformat = book.add_format({'bold': True}) hcol, hcol2 = 0, 0 for h in headers: sheet.write(1, hcol, h, headformat) hcol += 1 hcol2 += 1 for file in files: d = D100() # obj['type']() d = d.from_xml(file) for i in d.data: row += 1 sheet.write(row, col, i) print(f'write {row}', i) data = d.data[i] data.extend(d.obligs) sheet.write_row(row, 1, data) # d.data[i] for k, a in kwargs.items(): if k == 'autofilter': sheet.autofilter(a[0], a[1], 100, 100) # sheet2.autofilter(a[0], a[1], 1000, 1000) if k == 'freeze': sheet.freeze_panes(a[0], a[1]) # sheet2.freeze_panes(a[0], a[1]) book.close() if __name__ == '__main__': headers = ['cod fiscal', 'den', 'luna', 'an', 'oblig', 'cota', 'dat', 'ded', 'plata', 'rest', 'bonif', 'spons', 'AMEF', 'oblig', 'dat', 'ded', 'plata', 'rest', 'bonif', 'spons', 'AMEF'] d100 = D100() # d.from_xml('../D100_2021_6_17259191_generat.xml') d100.to_xlsx('D100', 'data', ['../D100_2021_6_17259191_generat.xml'], headers, autofilter=[1, 0], freeze=[2, 1]) # print(d100.data)