将文本添加到 table 中,最多达到一定数量

Add text to a table up to a certain number

我有一个 table,我想用数字 1 到 max 填充,其中 max 可以是大于 1 的任何数字,但不超过 table 中的单元格总数。我正在 运行 解决可能非常简单的问题,但我不只是得到: 达到最大值后停止向 table 添加数字 能够从不同的位置开始(例如,第一行的第三列)

我可以获得要填充的数字,但不会停在最大数字上。我已经尝试将迭代器放在 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 点停止,但它一直在继续!非常感谢您的帮助!

while 循环的一次迭代将遍历您创建的 整个 嵌套 for 循环。除了使用 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

根据我的评论,让您的 for 循环依赖于 max,解决方案可能如下:

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

如果 iterator 值大于或等于 max,则可以通过向 break 添加条件来提高效率,以防止执行循环max 值传递后。

您可能想输入:

if iterator > max:
    break

在你的两个 for 循环中