parser_intrastat.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import openpyxl as xl
  2. from openpyxl.styles import (Font, NamedStyle)
  3. def header_create(sheet, headers=[]):
  4. if len(headers) == 0:
  5. headers = ['DATA', 'FURNIZOR', 'CF', 'CountryOfOrigin', 'EXP', 'DeliveryTermsCode',
  6. 'ACode', 'Bcode', 'TransportCode', 'INVNR', 'VSCODE', 'NAME', 'GROUP',
  7. 'UM', 'Q', 'PRICE', 'NETWEIGHT', 'NETVALUE', 'SUPPL', 'SUPPLVALUE',
  8. 'Ppacking', 'Spacking', 'Paper', 'Plastic', 'Wooden']
  9. for n, h in enumerate(sheet.iter_cols(min_row=1, max_col=len(headers), max_row=1)):
  10. h[0].value = headers[n]
  11. for f in sheet['A1:Y1'][0]:
  12. f.font = Font(bold=True)
  13. def format_after(sheet, ref=None):
  14. date_style = NamedStyle(name='datetime', number_format='DD/MMM/YYYY')
  15. if not ref:
  16. ref = f'A1:Y{sheet.max_row}'
  17. sheet.freeze_panes = 'A2'
  18. sheet.auto_filter.ref = ref
  19. for cell in sheet.iter_rows(min_row=2, max_col=1, max_row=sheet.max_row):
  20. cell[0].style = date_style
  21. def parse_intrastat(articles, export, partners):
  22. ib = xl.load_workbook(articles)
  23. isheet = ib.worksheets[0]
  24. cb = xl.load_workbook(export)
  25. csheet = cb.worksheets[0]
  26. pb = xl.load_workbook(partners)
  27. psheet = pb.worksheets[0]
  28. xml_book = xl.Workbook()
  29. xml_book.create_sheet('intrastat', 0)
  30. xml_sheet = xml_book.worksheets[0]
  31. header_create(xml_sheet)
  32. for n, p in enumerate(csheet.iter_rows(min_row=2, max_col=14, max_row=csheet.max_row)): # .max_row - 1
  33. xml_sheet[f'A{n+2}'] = p[4].value
  34. xml_sheet[f'B{n+2}'] = p[0].value
  35. xml_sheet[f'L{n+2}'] = p[9].value
  36. xml_sheet[f'N{n+2}'] = p[11].value
  37. xml_sheet[f'O{n+2}'] = p[10].value
  38. xml_sheet[f'P{n+2}'] = p[12].value
  39. xml_sheet[f'R{n+2}'] = p[13].value
  40. for c in psheet.iter_rows(min_row=2, max_col=9, max_row=psheet.max_row):
  41. if xml_sheet[f'B{n+2}'].value == c[1].value:
  42. xml_sheet[f'C{n+2}'] = c[2].value
  43. xml_sheet[f'D{n+2}'] = c[3].value
  44. xml_sheet[f'E{n+2}'] = c[4].value
  45. xml_sheet[f'F{n+2}'] = c[5].value
  46. xml_sheet[f'G{n+2}'] = c[6].value
  47. xml_sheet[f'H{n+2}'] = c[7].value
  48. xml_sheet[f'I{n+2}'] = c[8].value
  49. for i in isheet.iter_rows(min_row=2, max_col=10, max_row=isheet.max_row):
  50. if xml_sheet[f'L{n+2}'].value == i[1].value:
  51. xml_sheet[f'K{n+2}'] = i[3].value
  52. xml_sheet[f'Q{n+2}'] = i[9].value * xml_sheet[f'O{n+2}'].value
  53. format_after(xml_sheet)
  54. xml_book.save('intrastat.xlsx')
  55. __all__ = ['xl', 'header_create', 'format_after', 'parse_intrastat']
  56. if __name__ == '__main__':
  57. parse_intrastat('intrastat_art.xlsx', 'Export.xlsx', 'intrastat_part.xlsx')