我正在使用 python-docx 库处理 Word 文档,并且在尝试填充表格中的单元格时遇到问题。
具体来说,我正在尝试将值插入到表中的单元格中,但我遇到了一个问题,即除了第一个表之外的所有表中值的顺序都是相反的。
这是我的Python代码的相关部分:
# From right to left becouse text is in Hebrew
table.cell(0, 5).text = "text 1"
table.cell(0, 4).text = "text 2"
table.cell(0, 3).text = "text 3"
table.cell(0, 2).text = "text 4"
table.cell(0, 1).text = "text 5"
table.cell(0, 0).text = "text 6"
我在这段代码中遇到了同样的问题:
# Start at row 5 because we need to leave space for the 5 default rows
for row in range(5, len(docx_table.rows) + 1):
for column in range(1, 7): # Columns 1 to 7 in the excel
cell = nz_xl.cell((int(xl_row) + row) + 5, column + 1)
# 'row + 5' because don't need to copy the first 2 rows
if cell.value is not None:
docx_table.cell(row, column - 1).text = str(cell.value)
# 'column - 1' because the table starts at 1 and not at 0. Otherwise 'index out of range'
我面临的问题是,此代码对于第一个表可以正常工作,但会颠倒所有后续表中值的顺序。如何确保所有表中的值都正确插入?
任何建议或见解将不胜感激!
不是答案,但不适合作为评论,希望能让您前进一两步:
对不起丹尼尔,你的代码不适合我的头脑。我建议您提取所有 Excel 位等,只需创建一些单词列表,然后尝试以相反的顺序插入。将所有这些位放在一个函数中使得这变得如此复杂,读者(包括你自己)无法轻易推断出它在做什么。这给错误提供了隐藏的地方。这是一个简单的例子,也许你可以将这些单词替换为希伯来语单词并尝试一下:
data = [
["abc", "def", "ghi"],
["jkl", "mno", "pqr"],
]
col_count = 3 # -- or len(data[0]) maybe --
row_count = len(data)
target_row_idxs = range(row_count)
for row_idx in target_row_idxs:
row = docx_table.rows[row_idx]
data_row = data[row_idx]
for col_idx in range(col_count): # -- counts 0, 1, 2
target_col_idx = col_count - col_idx - 1 # -- counts 2, 1, 0
row.cells[target_col_idx].text = data_row[col_idx]
需要注意的几点:
range(5, len(docx_table.rows) + 1)
这样的表达式就是一个很好的例子,也许可以将其命名为 target_row_idxs
这样的名称来明确它是什么。row
。为实际的 Row
对象保留该名称。例如,使用 cols
表示 col_count
也是如此。一旦您开始提取一些“组件”并使循环成为这些元素的简单“组合”,我希望您会突然看到它开始工作。如果没有,那么至少你会有一个清晰的案例,让别人能够很好地理解,帮助你找到哪里出错了:)