Добавить текст в таблицу до определенного числа - PullRequest
0 голосов
/ 01 октября 2019

У меня есть таблица, которую я хотел бы заполнить числами от 1 до max, где max может быть любым числом больше 1, но не более общего числа ячеек в таблице. Я сталкиваюсь с проблемами, которые, вероятно, действительно просты, но я не просто получаю: прекратить добавлять числа в таблицу, как только будет достигнуто максимальное значение. Уметь начинать с другого места (например, третий столбец в первой строке))

Я могу получить числа для заполнения, но не останавливаться на максимальном числе. Я попытался поместить итератор на все уровни цикла for, но я не могу достичь своих результатов.

Вот мой код:

from docx import Document

document_name = 'table_loop_test.docx'
document = Document('template.docx')

table = document.add_table(cols=7, rows=5)

iterator = 1
max = 30

while iterator <= max:
    for row in table.rows:
        for cell in row.cells:
            cell.text = f'{iterator}'
            iterator += 1

document.save(document_name)

try:
    subprocess.check_output('open ' + document_name, shell=True)
except subprocess.CalledProcessError as exc:
    print(exc.output).decode('utf-8')

Я думаю, это будетостановитесь на 30, но это просто продолжается! Большое спасибо за вашу помощь!

Ответы [ 3 ]

1 голос
/ 01 октября 2019

Исходя из моего комментария о зависимости ваших циклов for от max, решение может быть следующим:

for row in table.rows:
    for cell in row.cells:
        if iterator <= max:
            cell.text = f'{iterator}'
            iterator += 1

Это можно сделать более эффективным, добавив условие к breakесли значение iterator больше или равно max, чтобы предотвратить выполнение циклов for после передачи значения max.

1 голос
/ 01 октября 2019

Одна итерация вашего цикла while будет проходить через весь , вложенный в созданный вами цикл. Вместо использования цикла while вы можете добавить условие, чтобы разорвать оба цикла for.

for row in table.rows:
    for cell in row.cells:
        cell.text = f'{iterator}'
        iterator += 1
        if iterator > max_cell:
            break
    else:
        continue
    break

Я всегда чувствую себя забавно, когда использую циклы for-else, так как не могу вспомнить, когда else выполняетсяпоэтому альтернативой является использование return в функции:

def make_table(max_cell):
    for row in table.rows:
        for cell in row.cells:
            cell.text = f'{iterator}'
            iterator += 1
            if iterator > max:
                return
0 голосов
/ 01 октября 2019

Возможно, вы захотите поместить:

if iterator > max:
    break

в оба ваших цикла for

...