Saltar al contenido

Eliminar fila vacía – openpyxl

Solución:

Puede ser para alguien el próximo código será útil:

index_row = []

# loop each row in column A
for i in range(1, ws.max_row):
    # define emptiness of cell
    if ws.cell(i, 1).value is None:
        # collect indexes of rows
        index_row.append(i)

# loop each index value
for row_del in range(len(index_row)):
    ws.delete_rows(idx=index_row[row_del], amount=1)
    # exclude offset of rows through each iteration
    index_row = list(map(lambda k: k - 1, index_row))

Actualización de 2018: estaba buscando cómo eliminar una fila hoy y descubrí que la funcionalidad se agrega en openpyxl 2.5.0-b2. Lo intenté y funcionó perfectamente. Aquí está el enlace donde encontré la respuesta: https://bitbucket.org/openpyxl/openpyxl/issues/964/delete_rows-does-not-work-on-deleting

Y aquí está la sintaxis para eliminar una fila:

ws.delete_rows(index, 1)

donde: ‘ws’ es la hoja de trabajo, ‘índice’ es el número de fila y ‘1’ es el número de filas a eliminar.

También existe la posibilidad de eliminar columnas, pero no lo he probado.

Hasta donde yo sé, openpyxl no proporciona ninguna forma de eliminar filas. Puede usar COM en su lugar, por ejemplo:

import win32com.client

filename="c:/my_file.xlsx"
sheetname="Sheet1"
xl = win32com.client.DispatchEx('Excel.Application')
wb = xl.Workbooks.Open(Filename=filename) 
ws = wb.Sheets(sheetname)

begrow = 1
endrow = ws.UsedRange.Rows.Count
for row in range(begrow,endrow+1): # just an example
  if ws.Range('A{}'.format(row)).Value is None:
    ws.Range('A{}'.format(row)).EntireRow.Delete(Shift=-4162) # shift up

wb.Save()
wb.Close()
xl.Quit()
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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