es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Teniendo problemas para escribir una lista en una nueva fila cada vez durante un bucle while con openpyxl.

Estoy encontrando problemas al insertar los valores de la lista en una nueva fila cada vez que el código hace un bucle.\nEn pocas palabras, necesito que el código cada vez que hace un bucle escriba los valores de ‘lst’ en una fila separada cada vez.
He investigado mucho para intentar comprender cómo funciona esto y he encontrado muchos ejemplos, pero desafortunadamente no he logrado hacer que el código funcione siguiendo esos ejemplos.

Este es el código:

max_value = 5
lst = []

while True:
    wb = Workbook()
    ws = wb.active
    num = (max_value)
    for n in range(num):
        weight = float(input('Peso: '))
        lst.append(weight)
    ws.append(lst)

    if n+1 == max_value:
        wb.save(filename='path')

He intentado agregar ws.insert_rows(idx=2, amount=1) justo después de la línea ws.append(lst) de esta manera:

...

ws.insert_rows(idx=2, amount=1)
ws.append(lst)

if n+1 == max_value:
    wb.save(filename='path')

Pero no hace nada porque supongo que necesita algo que indique al código que escriba los siguientes valores en esa fila.
También he intentado algo como esto:

...

next_avail_row = len(list(ws.rows))
ws.append(lst)

if n+1 == max_value:
    wb.save(filename='path')

Pero aquí tampoco estoy seguro de cómo decirle al código después de encontrar next_avail_row = len(list(ws.rows)) que escriba en esa fila.

¿Alguna idea?

EDIT:

En este momento, si ingreso en el indicador, por ejemplo:
1,2,3,4,5

imprime:

[aquí había un enlace a una imagen]

Si sigo ingresando números, por ejemplo:
7,6,5,4,3

imprime:

[aquí había otro enlace a una imagen]

y así sucesivamente, lo que espero es:

[aquí había otro enlace a una imagen]

En pocas palabras, cada vez que se llama a la función, debe escribir en el mismo archivo, pero una fila más abajo. Espero que la explicación sea clara.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para insertar los valores de la lista en una nueva fila cada vez que el código se repite, puedes modificar la línea ws.append(lst) de la siguiente manera:

    for i in lst:
        ws.append([i])
    

    Esto recorrerá cada valor en lst y los agregará en una nueva fila en la hoja de cálculo. El [i] asegura que cada valor se inserte como una celda individual en una nueva fila.

    Aquí está el código actualizado:

    from openpyxl import Workbook
    
    max_value = 5
    lst = []
    
    while True:
        wb = Workbook()
        ws = wb.active
        num = max_value
        for n in range(num):
            weight = float(input('Peso: '))
            lst.append(weight)
        for i in lst:
            ws.append([i])
    
        if n+1 == max_value:
            wb.save(filename='ruta')
    

    Esto debería escribir cada valor en una fila separada cada vez que el código se repita.

Comments are closed.