convert.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import openpyxl
  2. import xlrd
  3. import csv
  4. import plac
  5. from pathlib import Path
  6. def convert_folder(folder: str):
  7. for xls_file in Path(folder).absolute().glob('*.xls'):
  8. convert_old(xls_file)
  9. for xls_file in Path(folder).absolute().glob('*.xlsx'):
  10. convert(xls_file)
  11. def localize_floats(el):
  12. return str(el).replace('.', ',') if isinstance(el, float) else el
  13. def convert_old(xls_file: Path):
  14. print('\n' + str(xls_file))
  15. try:
  16. workbook = xlrd.open_workbook(xls_file)
  17. except xlrd.XLRDError as e:
  18. print(e)
  19. return
  20. # first sheet as master without suffix
  21. csv_file = f'{xls_file.parent}/{xls_file.stem}.csv'
  22. print('-> ' + csv_file)
  23. ws = workbook.sheet_by_index(0)
  24. with open(csv_file, 'w', encoding='latin-1') as fwh:
  25. wr = csv.writer(fwh, delimiter=';')
  26. for rownum in range(ws.nrows):
  27. wr.writerow([localize_floats(el) for el in ws.row_values(rownum)])
  28. for sheet in workbook.sheet_names():
  29. csv_file = f'{xls_file.parent}/{xls_file.stem}_{sheet}.csv'
  30. print('-> ' + csv_file)
  31. ws = workbook.sheet_by_name(sheet)
  32. with open(csv_file, 'w', encoding='latin-1') as fwh:
  33. wr = csv.writer(fwh, delimiter=';')
  34. for rownum in range(ws.nrows):
  35. wr.writerow([localize_floats(el) for el in ws.row_values(rownum)])
  36. def convert(xls_file: Path):
  37. print('\n' + str(xls_file))
  38. workbook = openpyxl.load_workbook(xls_file)
  39. # first sheet as master without suffix
  40. csv_file = f'{xls_file.parent}/{xls_file.stem}.csv'
  41. print('-> ' + csv_file)
  42. sheet = workbook.worksheets[0]
  43. with open(csv_file, 'w', encoding='latin-1') as fwh:
  44. wr = csv.writer(fwh, delimiter=';')
  45. for row in sheet.iter_rows():
  46. wr.writerow([localize_floats(cell.value) for cell in row])
  47. for sheet in workbook:
  48. csv_file = f'{xls_file.parent}/{xls_file.stem}_{sheet.title}.csv'
  49. print('-> ' + csv_file)
  50. with open(csv_file, 'w', encoding='latin-1') as fwh:
  51. wr = csv.writer(fwh, delimiter=';')
  52. for row in sheet.iter_rows():
  53. wr.writerow([localize_floats(cell.value) for cell in row])
  54. if __name__ == '__main__':
  55. plac.call(convert_folder)