Rellené un modelo de Django con un marco de datos de pandas.
Para hacer esto, usé la función to_dict() () para que el modelo JSONField() Django acepte los datos.
Esto funciona bien. Ahora lo que estoy tratando de hacer es actualizar un archivo de Excel con estos datos.
Así que estoy accediendo a los datos en el modelo de Django e intento usar openpyxl para completar un Excel con los nuevos datos.
Sin embargo, tengo problemas porque aparece el error que dice que no se puede convertir a Excel.
¿Hay alguna forma alrededor de esto?
Mi modelo:
class myvalues(models.Model): items_list = models.JSONField()Función que está tratando de llenar Excel:
values_to_go_into_excel_obtained_from_model = myvalues.objects.values_list(“items_list”, flat=True) path = file_for_download.my_file.path wb = load_workbook(path) ws = wb["Sheet1"] pd.read_excel(path, engine='openpyxl', sheet_name="Sheet1") for row, v in enumerate(values_to_go_into_excel_obtained_from_model, 2): ws.cell(row, 4, v) wb.save(path)¿Alguna idea de por qué estoy recibiendo el error? Básicamente lo que estoy tratando de hacer es:
Step 1: pandas df -> Django model of type Json Step 2: Access Django model values Step 3: put values from Django model into excel fileTengo los pasos 1 y 2 pero no puedo obtener el paso 3.
Si desea guardar un json en particular en el archivo de Excel
df = pd.DataFrame(dictionary_from_query) df.to_excel(filepath)O si necesita agregar varios json, agréguelos a una lista y luego use esa lista para inicializar el marco de datos
ds = [] for ...: # your loop ds += [d] # where d is one of the dicts df = pd.DataFrame(ds) df.to_excel(filepath)En tu caso creo que los diccionarios ya están en una lista. Por lo tanto, solo puede usar el segundo método.
Siguiendo https://stackoverflow.com/a/55131749/1021819 , parece posible que esté intentando escribir una lista en una celda (que es una forma de provocar el error que está viendo).
Por lo tanto, debe recorrer la lista:
values_to_go_into_excel_obtained_from_model = myvalues.objects.values_list(“items_list”, flat=True) path = file_for_download.my_file.path wb = load_workbook(path) ws = wb["Sheet1"] # pd.read_excel(path, engine='openpyxl', sheet_name="Sheet1") # not required! for row, v in enumerate(values_to_go_into_excel_obtained_from_model, 2): for row_val, i_row_val in enumerate(row): ws.cell(row_val, 4+i_row_val, v) wb.save(path)Verifique su versión de openpyxl.
openpyxl 3.0.2 tiene un error al generar páginas de Excel. Este puede ser el problema