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.

Openpyxl guarda todo el contenido de Excel en una lista.

He escrito este código para guardar el contenido de un archivo XLS en una lista en Python:

import xlrd
file = "oktober-results.xls"
content = xlrd.open_workbook(file)
sheet = content.sheet_by_index(0)
sheet_to_list = []
for row in range(sheet.nrows):
    sheet_to_list.append([])
    for col in range(sheet.ncols):
        sheet_to_list[row].append(sheet.cell_value(row, col))

Este código funciona bien. Recientemente, me vi obligado a cambiar mi archivo de Excel al formato XLSX porque puede manejar más líneas.

El módulo xlrd no puede manejar archivos .xlsx. Por lo tanto, decidí usar openpyxl en su lugar.

Ahora estoy tratando de guardar el contenido de un archivo xlsx a una lista en Python, pero estoy teniendo problemas:

file = "november-results.xlsx"
content = openpyxl.load_workbook(file)
sheet = content.active
sheet_to_list = []
for row in range(1, sheet.max_row + 1):
    sheet_to_list.append([])
    for col in range(1, sheet.max_column + 1):
        sheet_to_list[row].append(sheet.cell(row=row, column=col).value)

¿Alguien puede ayudarme?

Obtuve el siguiente error:

sheet_to_list[rij].append(sheet.cell(row=rij, column=kol)).value

IndexError: list index out of range
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema parece estar en la indexación de sheet_to_list dentro del bucle interno. La instrucción append([]) crea una nueva lista vacía al final de sheet_to_list para cada fila, por lo que la primera lista está en realidad en el índice 0 y no en el 1. Por lo tanto, al intentar acceder a sheet_to_list[rij] donde rij comienza desde 1, lanza un IndexError.

    Para solucionar esto, simplemente resta 1 de rij al agregar a sheet_to_list:

    archivo = "resultados-noviembre.xlsx"
    contenido = openpyxl.load_workbook(archivo)
    hoja = contenido.active
    hoja_a_lista = []
    for rij in range(1, hoja.max_row + 1):
        hoja_a_lista.append([])
        for kol in range(1, hoja.max_column + 1):
            hoja_a_lista[rij - 1].append(hoja.cell(row=rij, column=kol).value)
    

    Esto debería guardar correctamente el contenido del archivo xlsx en hoja_a_lista.

Comments are closed.