使用openpyxl
,我尝试访问某个范围内的某些单元格值以更改其值。具体来说,我想将它们的值更改为每个范围中第一个单元格的值。例如,在下面的示例中,我们有一个合并的单元格范围'B3:B9'。我想用第一个单元格(B3)的值填充此范围内的每个单元格。
def fill_in(rows,first_cell,last_cell):
#Take first cell's value
first_value = str(first_cell.value)
#Copy and fill/assign this value into each cell of the range
for cell in rows:
print(cell) ##E.g. (<Cell 'Sheet1'.B3>,)
print(cell.value) ##I get error here: AttributeError: 'tuple' object has no attribute 'value'
cell.value = first_value ##Same error here.
wb2 = load_workbook('Example.xlsx')
sheets = wb2.sheetnames #list of sheetnames
for i,sheet in enumerate(sheets): #for each sheet
ws = wb2[sheets[i]]
range_list = ws.merged_cell_ranges
for _range in range_list:
first_cell = ws[_range.split(':')[0]] #first cell of each range
last_cell = ws[_range.split(':')[1]]
rows = ws[_range] #big set of sets; each cell within each range
fill_in(list(rows),first_cell,last_cell)
作为参考,rows
看起来像这样:
((<Cell 'Sheet1'.B3>,), (<Cell 'Sheet1'.B4>,), (<Cell 'Sheet1'.B5>,), (<Cell 'Sheet1'.B6>,), (<Cell 'Sheet1'.B7>,), (<Cell 'Sheet1'.B8>,), (<Cell 'Sheet1'.B9>,))
如何解决此错误?在每个范围内,如何使用第一个单元格的值成功分配每个单元格的值?
答案 0 :(得分:4)
在您的打印输出中,您有AttributeError: 'tuple' object ...
,并且您的单元格正在打印(<Cell 'Sheet1'.B3>,)
,因此您的实际变量包含一个元组,但您将它视为单元格。您需要解压缩元组以获取单元格变量。
如果你这样做:
for cell, in rows:
...
这是解包的一种方式,或者:
for tmp in rows:
cell = tmp[0]
是另一个。 顺便说一句,
sheets = wb2.sheetnames #list of sheetnames
for i,sheet in enumerate(sheets): #for each sheet
ws = wb2[sheets[i]]
该部分不是非常pythonic,以下应该做同样的...
for sheet in wb2.sheetnames:
ws = wb2[sheet]