如何使用 column=numbers 而不是 OpenPyXL 中的字母来读取单元格范围?
How to read range of cells using column=numbers instead of letters in OpenPyXL?
我知道我可以使用该代码读取单元格范围:
worksheet.cell(range="A1:J1").value
但我更喜欢在 select 列中使用数字而不是字母,例如:
worksheet.cell(row=1,column=1:10).value
这可能吗?
你确定worksheet.cell(range="A1:J1").value
可行吗?
使用官方文档中给出的 range
函数可以实现以上内容:
http://openpyxl.readthedocs.io/en/default/api/openpyxl.worksheet.worksheet.html
There are 2 ways to use worksheet.cell:
Usage: cell(coodinate=’A15’) or cell(row=15, column=1)
If coordinates are not given, then row and column must be given.
因此,您可以使用列表理解:
data = [worksheet.cell(row=1,column=i).value for i in range(1,11)]
ws.cell()
只能 return 个单独的单元格,因此它的范围没有意义。要访问一系列单元格,您可以使用 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 种干净简单的方法:
假设:
ws:工作表,例如ws=wb['Sheet1']
rng:ws 中的任何范围,例如rng=ws['A1':'D10']
或 rng=ws['A1':'D' + str(ws.max_column)]
方法一:
t=tuple(rng)
这将 return 一个包含每一行的元组的元组。所以在这个例子中,t 将有 10 个元组,每个内部元组将有 4 个 elements/values.
方法二:
final_list=[]
for row in rng:
mylist=list(row)
final_list.append(mylist)
这将是几乎相同的东西,除了你将有列表而不是元组。
注意:
列表列表或元组的元组将存储 cells
而不是它们的值,因此要访问它们的值,请执行以下操作:
first_cell_value=t[0][0].value
取决于你想如何读取这个数据!例如
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)
。
我知道我可以使用该代码读取单元格范围:
worksheet.cell(range="A1:J1").value
但我更喜欢在 select 列中使用数字而不是字母,例如:
worksheet.cell(row=1,column=1:10).value
这可能吗?
你确定worksheet.cell(range="A1:J1").value
可行吗?
使用官方文档中给出的 range
函数可以实现以上内容:
http://openpyxl.readthedocs.io/en/default/api/openpyxl.worksheet.worksheet.html
There are 2 ways to use worksheet.cell:
Usage: cell(coodinate=’A15’) or cell(row=15, column=1)
If coordinates are not given, then row and column must be given.
因此,您可以使用列表理解:
data = [worksheet.cell(row=1,column=i).value for i in range(1,11)]
ws.cell()
只能 return 个单独的单元格,因此它的范围没有意义。要访问一系列单元格,您可以使用 ws.iter_rows()
或 ws.rows
或 ws.columns
。直到 2.3 版 ws.iter_rows()
才接受 Excel 样式的范围表示法,但您可以使用行和列偏移来创建范围。从 2.4 版开始,您将能够为 min_row
、min_col
、max_row
和 max_col
.
您似乎想将范围分成行,并将每行的单元格值存储在元组或列表中。有 2 种干净简单的方法:
假设:
ws:工作表,例如ws=wb['Sheet1']
rng:ws 中的任何范围,例如rng=ws['A1':'D10']
或 rng=ws['A1':'D' + str(ws.max_column)]
方法一:
t=tuple(rng)
这将 return 一个包含每一行的元组的元组。所以在这个例子中,t 将有 10 个元组,每个内部元组将有 4 个 elements/values.
方法二:
final_list=[]
for row in rng:
mylist=list(row)
final_list.append(mylist)
这将是几乎相同的东西,除了你将有列表而不是元组。
注意:
列表列表或元组的元组将存储 cells
而不是它们的值,因此要访问它们的值,请执行以下操作:
first_cell_value=t[0][0].value
取决于你想如何读取这个数据!例如
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)
。