Openpyxl es una biblioteca de Python para manipular archivos xlsx/xlsm/xltx/xltm. Con Openpyxl puede crear un nuevo archivo o una hoja de Excel y también puede usarse en un archivo o una hoja de Excel existente.
Instalación
Este módulo no viene integrado con Python. Para instalar este tipo, escriba el siguiente comando en la terminal.
pip3 install openpyxl
En este artículo, discutiremos cómo eliminar filas en una hoja de Excel con openpyxl. Puede encontrar el archivo de Excel utilizado para este artículo aquí .
Eliminación de filas vacías (una o más)
Método 1:
Este método elimina las filas vacías pero no continúa con las filas vacías, porque cuando elimina la primera fila vacía, la siguiente fila obtiene su posición. Por lo tanto, no está validado. Por lo tanto, este problema se puede resolver mediante llamadas a funciones recursivas.
Acercarse:
- Importar biblioteca openpyxl.
- Cargue el archivo de Excel con openpyxl.
- Luego cargue la hoja desde el archivo.
- Iterar las filas de la hoja que está cargada.
- Pase la fila para eliminar la función.
- Luego verifique si cada celda está vacía si alguna de las celdas no vacías devuelve la función, por lo que solo las filas vacías saldrán del bucle for sin regresar.
- Solo si todas las filas están vacías, se ejecuta la declaración de eliminación.
- Finalmente, guarde el archivo en la ruta.
Python3
# import openpyxl library import openpyxl # function to remove empty rows def remove(sheet, row): # iterate the row object for cell in row: # check the value of each cell in # the row, if any of the value is not # None return without removing the row if cell.value != None: return # get the row number from the first cell # and remove the row sheet.delete_rows(row[0].row, 1) if __name__ == '__main__': # enter your file path path = './delete_empty_rows.xlsx' # load excel file book = openpyxl.load_workbook(path) # select the sheet sheet = book['daily sales'] print("Maximum rows before removing:", sheet.max_row) # iterate the sheet object for row in sheet: remove(sheet,row) print("Maximum rows after removing:",sheet.max_row) # save the file to the path path = './openpy.xlsx' book.save(path)
Producción:
Maximum rows before removing: 15 Maximum rows after removing: 14
Archivo después de la eliminación:
El primer método eliminó solo la primera fila vacía y la segunda fila vacía continua no se elimina.
Método 2:
Este método elimina las filas vacías, incluidas las filas vacías continuas mediante el método recursivo. El punto clave es pasar el objeto de hoja modificado como argumento a la función recursiva. Si no hay una función de fila vacía, se devuelve inmediatamente.
Acercarse:
- Importar biblioteca openpyxl.
- Cargue el archivo de Excel con openpyxl.
- Luego cargue la hoja desde el archivo.
- Pase la hoja que está cargada a la función de quitar.
- Iterar las filas con iter_rows().
- Si alguna de las celdas de una fila no está vacía, any() devuelve falso, por lo que se devuelve inmediatamente.
- Si todas las celdas de una fila están vacías, elimine la fila con delete_rows().
- Luego pase el objeto de hoja modificado a la función de eliminación, esto se repite hasta llegar al final de la hoja.
- Finalmente, guarde el archivo en la ruta.
Python3
# import openpyxl library import openpyxl # function to remove empty rows def remove(sheet): # iterate the sheet by rows for row in sheet.iter_rows(): # all() return False if all of the row value is None if not all(cell.value for cell in row): # detele the empty row sheet.delete_rows(row[0].row, 1) # recursively call the remove() with modified sheet data remove(sheet) return if __name__ == '__main__': # enter your file path path = './delete_empty_rows.xlsx' # load excel file book = openpyxl.load_workbook(path) # select the sheet sheet = book['daily sales'] print("Maximum rows before removing:", sheet.max_row) # iterate the sheet for row in sheet: remove(sheet) print("Maximum rows after removing:",sheet.max_row) # save the file to the path path = './openpy.xlsx' book.save(path)
Producción:
Maximum rows before removing: 15 Maximum rows after removing: 13
Archivo después de la eliminación:
Este método eliminó ambas filas vacías continuas como se esperaba.
Eliminación de todas las filas
Método 1:
En este método, eliminamos la segunda fila repetidamente hasta que quede una sola fila (nombres de columna).
Acercarse:
- Importar biblioteca openpyxl.
- Cargue el archivo de Excel y la hoja para trabajar.
- Pase el objeto de hoja para eliminar la función.
- Elimine la segunda fila, hasta que quede una sola fila.
- Finalmente, devuelve la función.
Python3
import openpyxl def delete(sheet): # continuously delete row 2 until there # is only a single row left over # that contains column names while(sheet.max_row > 1): # this method removes the row 2 sheet.delete_rows(2) # return to main function return if __name__ == '__main__': # enter your file path path = './delete_every_rows.xlsx' # load excel file book = openpyxl.load_workbook(path) # select the sheet sheet = book['sheet1'] print("Maximum rows before removing:", sheet.max_row) delete(sheet) print("Maximum rows after removing:", sheet.max_row) # save the file to the path path = './openpy.xlsx' book.save(path)
Producción:
Maximum rows before removing: 15 Maximum rows after removing: 1
Archivo después de la eliminación:
Método 2:
En este método, usamos el método de hoja openpyxl para eliminar filas enteras con un solo comando.
Acercarse:
- Importar biblioteca openpyxl.
- Cargue el archivo de Excel y la hoja para trabajar.
- Use la función delete_rows para eliminar todas las filas excepto los nombres de las columnas.
- Entonces queda una sola fila vacía.
Python3
import openpyxl if __name__ == '__main__': # enter your file path path = './delete_every_rows.xlsx' # load excel file book = openpyxl.load_workbook(path) # select the sheet sheet = book['sheet1'] print("Maximum rows before removing:", sheet.max_row) # sheet.max_row is the maximum number # of rows that the sheet have # delete_row() method removes rows, first parameter represents row # number and sencond parameter represents number of rows # to delete from the row number sheet.delete_rows(2, sheet.max_row-1) print("Maximum rows after removing:", sheet.max_row) # save the file to the path path = './openpy.xlsx' book.save(path)
Producción:
Maximum rows before removing: 15 Maximum rows after removing: 1
Archivo después de la eliminación: