Удалить всю строку в файле Excel, используя Python - PullRequest
0 голосов
/ 10 февраля 2020

В настоящее время я использую work_sheet.delete_rows(), используя openpyxl модуль, но кажется, что он удаляет только значения в строке, а не саму строку. Как я могу удалить всю строку ??

Это фактические данные Excel, к которым я в данный момент обращаюсь ..

enter image description here

Теперь это вывод после удаления строк .. Процесс удаляет только значения каждой строки, а не всю строку ...

enter image description here

1 Ответ

2 голосов
/ 10 февраля 2020

Я предполагаю, что что-то не так с тем, как вы это называете. В то время как вы указали, что вы используете, вы не дали нам фактический код , который вы используете.

Фактический исходный код для OpenPyXl показывает, что он действительно перемещает строки ниже удаляемой области до начала этой области.

Это можно увидеть, используя следующую простую электронную таблицу:

      A       B
--+-------+-------+
1 |   1   |   a   |
2 |   3   |   b   |
3 |   5   |   c   |
4 |   7   |   d   |
5 |   9   |   e   |

Следующий скрипт показывает удаление второй, третьей и четвертой строки:

import openpyxl

def dumpWs(desc, ws):
    print(f'{desc}: ', end = '')
    for row in ws.values:
        print(end = '<')
        sep = ''
        for value in row:
            print(f'{sep}{value}', end = '')
            sep = ', '
        print(end = '> ')
    print()

wb = openpyxl.load_workbook('version1.xlsx')
ws = wb.active
dumpWs('As loaded   ', ws)

ws.delete_rows(2, 3)
dumpWs('After delete', ws)

wb.save('version2.xlsx')

Запуск этого скрипта приводит к:

As loaded   : <1, a> <3, b> <5, c> <7, d> <9, e> 
After delete: <1, a> <9, e> 

Версия, сохраненная со строкой wb.save: как и ожидалось:

      A       B
--+-------+-------+
1 |   1   |   a   |
5 |   9   |   e   |

Одна вещь, которую вы можете хотите проверить, это версия OpenPyXl, которую вы используете, поскольку существует несколько отчетов об ошибках на различных итерациях delete_rows. Я использую версию 3.0.3 (с Python 3.6.8, для полноты).

...