openpyxl convierte CSV a EXCEL

¿Cómo puedo convertir un archivo CSV con : delimitador a XLS (hoja de Excel) usando el módulo openpyxl ?

Pues aquí tienes …

 import csv from openpyxl import Workbook from openpyxl.cell import get_column_letter f = open(r'C:\Users\Asus\Desktop\herp.csv') csv.register_dialect('colons', delimiter=':') reader = csv.reader(f, dialect='colons') wb = Workbook() dest_filename = r"C:\Users\Asus\Desktop\herp.xlsx" ws = wb.worksheets[0] ws.title = "A Snazzy Title" for row_index, row in enumerate(reader): for column_index, cell in enumerate(row): column_letter = get_column_letter((column_index + 1)) ws.cell('%s%s'%(column_letter, (row_index + 1))).value = cell wb.save(filename = dest_filename) 

Una solución mucho más simple y minimalista:

 import csv import openpyxl wb = openpyxl.Workbook() ws = wb.active with open('file.csv') as f: reader = csv.reader(f, delimiter=':') for row in reader: ws.append(row) wb.save('file.xlsx') 

Aquí está la solución de Adam expandida para eliminar los caracteres que openpyxl considera ilegales y lanzará una excepción para:

 import re from openpyxl.cell.cell import ILLEGAL_CHARACTERS_RE ... ##ws.append(row) - Replace with the code below ws.append([ILLEGAL_CHARACTERS_RE.sub('',row)]) 

ILLEGAL_CHARACTERS_RE es una expresión regular comstackda que contiene los caracteres que openpyxl considera “ilegales”. El código simplemente está sustituyendo esos caracteres con una cadena vacía.

Fuente: Bitpucket openpyxl número # 873 : elimine los caracteres ilegales en lugar de lanzar una excepción