Использование openpyxl для вставки пустой строки перед определенной строкой - PullRequest
0 голосов
/ 12 мая 2019

Я работал над проектом, в котором я ищу в документе .xlsx ячейку, содержащую определенное значение «D», а затем вставляю пустую строку перед строкой этой ячейки

ВотПример кода, который я придумал:

import openpyxl
wb = openpyxl.load_workbook('TestFile4.xlsx')
sheet = wb['Sheet1']
for row in sheet.iter_rows():
    for cell in row:
        if cell.value == 'D':
            sheet.insert_rows(cell.row, amount=1)

Когда я запускаю этот скрипт, вместо вставки одной строки до того, как строка ячейки будет иметь значение 'D', он вставил 5 строк, например: https://i.stack.imgur.com/saSWf.png

Вы можете мне помочь?Большое спасибо!

1 Ответ

0 голосов
/ 12 мая 2019

Это логическая ошибка, когда при автоматической вставке новой строки следующая строка изменится на искомое значение, следовательно, при повторении цикла условие снова будет истинным, поэтому будет снова вставлена ​​новая строка.

Например: у вас есть 6 строк, так что цикл for будет выполнен 6 раз, и ваше условие истинно на 4-й итерации, и вы вводите новую строку. это означает, что D изменит свое положение на 5-ую строку, и если условие снова станет True.

Вы можете преодолеть это, добавив Прерывание цикла:

import openpyxl
flag=False
wb = openpyxl.load_workbook('Test.xlsx')
sheet = wb['Sheet1']
for row in sheet.iter_rows():
    for cell in row:
        if cell.value == 'D':
            sheet.insert_rows(cell.row, amount=1)
            flag=True
            break
    if flag:break
    else:
        continue
wb.save("test.xlsx")
...