¿Cómo eliminar una o más filas en Excel usando Openpyxl?

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:

Publicación traducida automáticamente

Artículo escrito por kabilan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *