12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- import zipfile
- import openpyxl
- import xlrd
- import csv
- import plac
- from pathlib import Path
- def convert_folder(folder=None):
- if folder is None:
- folder = str(Path(__file__).parent)
- for xls_file in Path(folder).absolute().glob('*.xls'):
- convert_old(xls_file)
- for xls_file in Path(folder).absolute().glob('*.xlsx'):
- convert(xls_file)
- def localize_floats(el):
- return str(el).replace('.', ',') if isinstance(el, float) else el
- def convert_old(xls_file: Path):
- print('\n' + str(xls_file))
- try:
- workbook = xlrd.open_workbook(xls_file, ignore_workbook_corruption=True)
- except xlrd.XLRDError as e:
- print(e)
- return
- # first sheet as master without suffix
- csv_file = f'{xls_file.parent}/{xls_file.stem}.csv'
- print('-> ' + csv_file)
- ws = workbook.sheet_by_index(0)
- with open(csv_file, 'w', encoding='latin-1') as fwh:
- wr = csv.writer(fwh, delimiter=';')
- for rownum in range(ws.nrows):
- wr.writerow([localize_floats(el) for el in ws.row_values(rownum)])
- for sheet in workbook.sheet_names():
- csv_file = f'{xls_file.parent}/{xls_file.stem}_{sheet}.csv'
- print('-> ' + csv_file)
- ws = workbook.sheet_by_name(sheet)
- with open(csv_file, 'w', encoding='latin-1') as fwh:
- wr = csv.writer(fwh, delimiter=';')
- for rownum in range(ws.nrows):
- wr.writerow([localize_floats(el) for el in ws.row_values(rownum)])
- def convert(xls_file: Path):
- print('\n' + str(xls_file))
- try:
- workbook = openpyxl.load_workbook(xls_file)
- except zipfile.BadZipFile as e:
- print(e)
- return
- # first sheet as master without suffix
- csv_file = f'{xls_file.parent}/{xls_file.stem}.csv'
- print('-> ' + csv_file)
- sheet = workbook.worksheets[0]
- with open(csv_file, 'w', encoding='latin-1') as fwh:
- wr = csv.writer(fwh, delimiter=';')
- for row in sheet.iter_rows():
- wr.writerow([localize_floats(cell.value) for cell in row])
- for sheet in workbook:
- csv_file = f'{xls_file.parent}/{xls_file.stem}_{sheet.title}.csv'
- print('-> ' + csv_file)
- with open(csv_file, 'w', encoding='latin-1') as fwh:
- wr = csv.writer(fwh, delimiter=';')
- for row in sheet.iter_rows():
- wr.writerow([localize_floats(cell.value) for cell in row])
- if __name__ == '__main__':
- plac.call(convert_folder)
|