反转 Python-docx 表中的单元格值顺序

问题描述 投票:0回答:1

我正在使用 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'

我面临的问题是,此代码对于第一个表可以正常工作,但会颠倒所有后续表中值的顺序。如何确保所有表中的值都正确插入?

任何建议或见解将不胜感激!

python python-docx
1个回答
0
投票

不是答案,但不适合作为评论,希望能让您前进一两步:

对不起丹尼尔,你的代码不适合我的头脑。我建议您提取所有 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
    也是如此。

一旦您开始提取一些“组件”并使循环成为这些元素的简单“组合”,我希望您会突然看到它开始工作。如果没有,那么至少你会有一个清晰的案例,让别人能够很好地理解,帮助你找到哪里出错了:)

© www.soinside.com 2019 - 2024. All rights reserved.