我知道我可以使用该代码读取单元格范围:
worksheet.cell(range="A1:J1").value
但我更喜欢使用数字而不是字母来选择列,如下所示:
worksheet.cell(row=1,column=1:10).value
这可能吗?
答案 0 :(得分:7)
您确定worksheet.cell(range="A1:J1").value
是否可行?
使用官方文档中提供的range
函数可以实现上述目的:
http://openpyxl.readthedocs.io/en/default/api/openpyxl.worksheet.worksheet.html
有两种方法可以使用worksheet.cell:
用法:细胞(coodinate ='A15')或细胞(row = 15,column = 1)
如果没有给出坐标,则必须给出行和列。
所以,你可以使用列表理解:
data = [worksheet.cell(row=1,column=i).value for i in range(1,11)]
答案 1 :(得分:5)
ws.cell()
只能返回单个单元格,因此它的范围毫无意义。要访问一系列单元格,您可以使用ws.iter_rows()
或ws.rows
或ws.columns
。最高版本2.3 ws.iter_rows()
仅接受Excel样式范围表示法,但您可以使用行和列偏移来创建范围。从版本2.4开始,您将能够为min_row
,min_col
,max_row
和max_col
提供完全数字(基于1的索引)值。
答案 2 :(得分:0)
似乎您希望将范围分成行并将每行的单元格值存储在元组或列表中。有两种方法干净且容易:
<强>假设:强>
ws:工作表,例如ws=wb['Sheet1']
rng:ws中的任何范围,例如: rng=ws['A1':'D10']
或rng=ws['A1':'D' + str(ws.max_column)]
方法1:
t=tuple(rng)
这将返回一个包含每行元组的元组。所以在这个例子中,t将有10个元组,每个内元组将有4个元素/值。
方法2:
final_list=[]
for row in rng:
mylist=list(row)
final_list.append(mylist)
这将是几乎相同的事情,除了你将有列表的元组。
注意:强>
元组的列表或元组列表将存储cells
而不是它们的值,因此要访问它们的值,请执行以下操作:
first_cell_value=t[0][0].value
答案 3 :(得分:0)
取决于您要如何读取此数据!例如
type(sheet['A7':'B8'])
通过输入
会给您<class 'tuple'>
type(sheet['A7':'B8'][i])
如果i = 1,2,您将获得相同的类型。因此,它是一个元组的元组。它具有与范围内的行数一样多的元组。
我定义一个函数,将行列范围的起始-结束索引作为其参数,并返回类似的元组元组,但内部具有单元格的值。 您可以类似地使用不同类型的输出以及要提取的任何信息来定义自己的函数。
def RangeValue(a, b, c, d):
return(tuple(tuple(sheet.cell(row=a+i, column=c+j).value for j in range(d-c+1)) for i in range(b-a+1)))
现在对于范围A7:B8,您只需要询问RangeValue(7,8,1,2)
。