'''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 D710(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']) # print(root.nsmap) self.tree = xml.xpath('/x:declaratie710/*', namespaces={'x': 'mfp:anaf:dgti:d710: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)['suma_dat_I'])) self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_dat_C'])) self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_ded_I'])) self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_ded_C'])) self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_plata_I'])) self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_plata_C'])) self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_rest_I'])) self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_rest_C'])) self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_bonif_I'])) self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_bonif_C'])) self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_spons_I'])) self.obligs.append(int(defaultdict(lambda: 0, oblig.attrib)['suma_spons_C'])) 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 = D710() # 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', 'dat', 'dat_C', 'ded', 'ded_C', 'plata', 'plata_C', 'rest', 'rest_C', 'bonif', 'spons', 'spons_C', 'AMEF', 'oblig', 'dat', 'dat_C', 'ded', 'ded_C', 'plata', 'plata_C', 'rest', 'rest_C', 'bonif', 'spons', 'spons_C', 'AMEF'] d710 = D710() # d.from_xml('../D100_2021_6_17259191_generat.xml') d710.to_xlsx('D710', 'data', ['D710_47381114_2022_12.xml'], headers, autofilter=[1, 0], freeze=[2, 1]) # print(d100.data)