【问题标题】:Openpyxl: Concatenation of several columns into one cell per row (Multi-row)Openpyxl:将几列连接成每行一个单元格(多行)
【发布时间】:2020-02-10 02:13:41
【问题描述】:

此问题是对以下问题的跟进:Openpyxl: TypeError - Concatenation of several columns into one cell per row

我想做的事: 我想将每行从 F 列到 M 列的单元格连接起来,并将连接的值放入 E 列,如下所示。这需要同时对所有行进行。

输入:

A B C D E F   G   H  .. M
.......   E1  90  2A .. 26
.......   0   80  F8 .. 

输出:

A B C D E         F   G   H  .. M
....... E1902A..26
....... 080F8..

代码:

def concat_f_to_m():
    for row_value in range(1, sheet.max_row+1):
        values=[]
        del values[:]
        for row in sheet.iter_rows(min_col=6, max_col=14, min_row=row_value, max_row=row_value):
            for cell in row:
                if cell.value != None:
                    values.append(str(cell.value))

                else:
                    del values[:]
                    pass

            sheet[f'E{row_value}'].value= ''.join(values)

concat_f_to_m()

此外,我已将最大列设置为第 N (14) 列,因为最长的代码一直到第 M 列,并且我想在没有找到条目时停止循环,以便出去并加入列表的项目。我无法克服以下问题:尽管打印的值列表仅显示行的项目,但它不会将其写到单元格中。 您能否给我一个提示,如何通过在某一行加入值列表来连接所有行?谢谢!

【问题讨论】:

  • 这能回答你的问题吗? Iterate over Worksheets, Rows, Columns
  • @stovfl 非常感谢!它没有帮助,但我会在上面发布正确的实现!我一直在错误的轨道上(我想如果我把join(values) 行放在append 之后它不会加入整个列表,因为它会迭代它。不知何故这是错误的。问题解决了!

标签: python excel openpyxl


【解决方案1】:

正确的实现:

def concat_f_to_m():
for row_value in range(1, sheet.max_row+1):
    values=[]
    del values[:]
    for row in sheet.iter_rows(min_col=6, max_col=14, min_row=row_value, max_row=row_value):
        for cell in row:
            if cell.value != None:

                values.append(str(cell.value))
                sheet[f'E{row_value}'].value= ''.join(values)
            else:
                del values[:] 
                break

concat_f_to_m()

【讨论】:

    猜你喜欢
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 2022-11-23
    相关资源
    最近更新 更多