Openpyxl:TypeError-将多列串联成每行一个单元格

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

我是openpyxl的新手,无法弄清楚我的错误原因是什么。希望您能看到问题并告诉我要进行哪些更改!

我想做什么:我想将每行从F列到M的单元格连接起来,并将连接后的值放入E列,如下所示。(由于每行是不同种类的信号,所以行并不总是从F列填充到M列。但是我还没有为此添加if子句。这只是有关该结构的信息。)

输入:

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..

我到目前为止所做的(代码):

theFile = openpyxl.load_workbook('T013.xlsx')
allSheetNames = theFile.sheetnames 
print("All sheet names {} " .format(theFile.sheetnames)) 
sheet = theFile.active

#loop to concatenate
for i,row in enumerate(sheet.rows,1):
        for column in range(6,13): #column F-M
            sRow=str(i)  
            Ecell = sheet['E' + sRow]
            ref = sheet["F:M"] #range of cells 
            for cell in range(ref):
                values = str(cell.value)  #collect data
            Ecell.value = ''.join(values) # write values

我遇到哪种错误(完整的追溯):

C:\Users\..\Desktop\Practical Part\CAN Python>python ConcatenateHEX.py
All sheet names ['T013']
Traceback (most recent call last):
  File "ConcatenateBIN.py", line 38, in <module>
    for cell in range(ref):
TypeError: 'tuple' object cannot be interpreted as an integer

我已经尝试更改'ref'变量,但错误始终相同!你能支持我吗?非常感谢!

编辑(2/10/2020):此外,我想对所有要记录下来的行使用该函数。因此我想出了这个变化:

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=13, min_row=row_value, max_row=row_value):
        for cell in row:
            if cell.value == None:
                pass
            else:
                values.append(str(cell.value))
    sheet[f'E{row_value}'].value= ''.join(values)

我无法克服以下问题:从行1到行xyz的所有值都打印在row_value单元格中(例如row_value = 13,从行1到13的所有值都在单元格E13中并置)。因此,我想遍历row_value以便遍历所有行,但是以某种方式行不通。您能否提示我如何通过在特定行加入值列表来连接所有行?谢谢!

python excel concatenation openpyxl
1个回答
0
投票

使用openpyxl,我创建了一个小功能,可以一次完成一行操作:

import openpyxl

theFile = openpyxl.load_workbook('T013.xlsx')
allSheetNames = theFile.sheetnames 
print("All sheet names: {}" .format(theFile.sheetnames)) 
sheet = theFile.active


def concat_f_to_m(row_value):
    values=[]
    del values[:]
    for row in sheet.iter_rows(min_col=6, max_col=13, min_row=row_value, max_row=row_value):
        for cell in row:
            if cell.value == None:
                pass
            else:
                values.append(str(cell.value))
    sheet[f'E{row_value}'].value= ''.join(values)


concat_f_to_m(1)
concat_f_to_m(2)
theFile.save('T013.xlsx')

输出:

Excel Output

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