Я предполагаю, что что-то не так с тем, как вы это называете. В то время как вы указали, что вы используете, вы не дали нам фактический код , который вы используете.
Фактический исходный код для 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
, для полноты).