如何在OpenPyXL中使用column=numbers而不是letters读取单元格范围?

2024-04-24 13:17:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道我可以用这些代码读取一系列的单元格:

worksheet.cell(range="A1:J1").value

但我更喜欢用数字而不是字母来选择列,比如:

worksheet.cell(row=1,column=1:10).value

这可能吗?


Tags: 代码valuea1字母cellrangecolumn数字
3条回答

你确定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:工作表,例如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

ws.cell()只能返回单个单元格,因此其范围没有意义。要访问一系列的细胞,可以使用ws.iter_rows()ws.rowsws.columns。2.3版之前(含2.3版)ws.iter_rows()只接受Excel样式的范围表示法,但可以使用行和列偏移量来创建范围。从2.4版开始,您将能够为min_rowmin_colmax_rowmax_col提供完全数字(基于1的索引)值。

相关问题 更多 >