Python 如何在openpyxl中访问单元格值

Python 如何在openpyxl中访问单元格值,python,excel,python-3.x,openpyxl,Python,Excel,Python 3.x,Openpyxl,使用openpyxl,我试图访问某个范围内的某些单元格值以更改其值。具体来说,我想将它们的值更改为每个范围中第一个单元格的值。例如,在下面的示例中,我们有一个合并的单元格范围'B3:B9'。我想用第一个单元格(B3)的值填充这个范围内的每个单元格 def填充(行、第一个单元格、最后一个单元格): #取第一个单元格的值 first_value=str(first_cell.value) #将此值复制并填充/分配到范围的每个单元格中 对于行中的单元格: 打印(单元格)##例如(,) print(ce

使用
openpyxl
,我试图访问某个范围内的某些单元格值以更改其值。具体来说,我想将它们的值更改为每个范围中第一个单元格的值。例如,在下面的示例中,我们有一个合并的单元格范围'B3:B9'。我想用第一个单元格(B3)的值填充这个范围内的每个单元格

def填充(行、第一个单元格、最后一个单元格):
#取第一个单元格的值
first_value=str(first_cell.value)
#将此值复制并填充/分配到范围的每个单元格中
对于行中的单元格:
打印(单元格)##例如(,)
print(cell.value)##这里有个错误:AttributeError:'tuple'对象没有属性'value'
cell.value=第一个_值##这里有相同的错误。
wb2=加载工作簿('Example.xlsx')
图纸=wb2.sheetnames#图纸名称列表
对于i,枚举中的表(表):#对于每个表
ws=wb2[工作表[i]]
范围\u列表=ws.merged\u单元格\u范围
对于范围列表中的范围:
第一个单元格=ws[_range.split(':')[0]]#每个范围的第一个单元格
last_cell=ws[_range.split(':')[1]]
行=ws[_范围]#大集合;每个范围内的每个单元格
填写(列表(行)、第一个单元格、最后一个单元格)
作为参考,
如下所示:
(,),(,),(,),(,),(,),(,),(,),(,)


如何解决此错误?在每个范围中,我如何才能成功地将每个单元格的值与第一个单元格的值赋值?

在打印输出中,您有
AttributeError:“tuple”对象…
,并且您的单元格打印方式类似
(,)
,因此您的实际变量包含一个元组,但您将其视为单元格。您需要解压元组以获得单元格变量

如果您这样做:

for cell, in rows:
    ...
这是打开包装的一种方式,或者:

for tmp in rows:
    cell = tmp[0]
这是另一个。 顺便说一句

那一部分不是很像蟒蛇,下面也应该这样做

for sheet in wb2.sheetnames:
    ws = wb2[sheet]

在打印输出中,您有
AttributeError:'tuple'对象…
,并且您的单元格打印方式类似于
(,)
,因此您的实际变量包含一个tuple,但您将其视为单元格。您需要解压元组以获得单元格变量

如果您这样做:

for cell, in rows:
    ...
这是打开包装的一种方式,或者:

for tmp in rows:
    cell = tmp[0]
这是另一个。 顺便说一句

那一部分不是很像蟒蛇,下面也应该这样做

for sheet in wb2.sheetnames:
    ws = wb2[sheet]

@ahed87-我知道您的第一个解决方案是对单元格的
,行:
解压元组。你能解释一下它是如何解包的吗?特别是逗号在解包中是如何起作用的?为了简单起见,我们假设解包必须一对一进行(在py36上不是这样)。通过赋值和for循环解包都是用逗号完成的。这意味着以下
a,b,c=(0,1,2)
是有效的解包。在您的情况下,您需要触发解包,并且您只有一个元素,因此
a,=(0,)
。另一种方法是使用
a=(0,)[0]
@ahed87进行索引查找-我尝试了您的第一种解决方案(
针对单元格,在行中:
),但我遇到了以下错误:
ValueError:要解压缩的值太多(预期为1)
。我假设这是因为元组中有不止一个元素?谢谢你的回答。是的,你在用哪种python?这行代码在py36上的一个测试用例中对我有用,所以如果您打印的变量内容是正确的,那就有点奇怪了。解包的一般原则是它是什么,所以您只需要将它与变量中的实际内容正确匹配。或者保持循环不变,并在循环中进行索引查找。@ahed87-我在Python 3.6.2中。@ahed87-我知道您的第一个解决方案是
单元格,行:
解压元组。你能解释一下它是如何解包的吗?特别是逗号在解包中是如何起作用的?为了简单起见,我们假设解包必须一对一进行(在py36上不是这样)。通过赋值和for循环解包都是用逗号完成的。这意味着以下
a,b,c=(0,1,2)
是有效的解包。在您的情况下,您需要触发解包,并且您只有一个元素,因此
a,=(0,)
。另一种方法是使用
a=(0,)[0]
@ahed87进行索引查找-我尝试了您的第一种解决方案(
针对单元格,在行中:
),但我遇到了以下错误:
ValueError:要解压缩的值太多(预期为1)
。我假设这是因为元组中有不止一个元素?谢谢你的回答。是的,你在用哪种python?这行代码在py36上的一个测试用例中对我有用,所以如果您打印的变量内容是正确的,那就有点奇怪了。解包的一般原则是它是什么,所以您只需要将它与变量中的实际内容正确匹配。或者保持循环不变,并在循环中进行索引查找。@ahed87-我使用的是Python 3.6.2。