如何使用OpenPyXL从返回的元组中获取值

时间:2018-05-13 18:49:56

标签: excel python-2.7 tuples openpyxl

我编写了一些代码来生成使用OpenPyXL库迭代列的.xlsx文件中的元组。

from openpyxl import workbook
wb = load_workbook('....\example.xlsx')
ws = wb.get_sheet_by_name('SomeMatrix')
c = tuple(ws.columns)
print c

返回

((<Cell u'SomeMatrix'.A1>, <Cell u'SomeMatrix'.B1>, ..., <Cell u'SomeMatrix'.CY1>),...
,(<Cell u'SomeMatrix'.A400>, <Cell u'SomeMatrix'.B400>, <Cell u'SomeMatrix'.CY400>))

我想从这些多列中提取值(例如,通过使用cell.value),这样我就可以获得一个名为c的元组元组,它应该如下所示:

c= ((1,2,...,1234),(3,5,...,9328),...,(2,1,...,4321))

1 个答案:

答案 0 :(得分:1)

对于任何有类似问题的人来说,我最终是如何完成的。 请注意,我不熟悉Python编码,所以我不能保证这是一个有效的解决方案。如果我的任何陈述错误,请纠正我。此外,随时发布更短和/或更有效的解决方案。

使用iter_cols()函数返回一个生成器,该生成器快速进行单次迭代,因为它在访问之前不会将数据加载到内存中。相反,它可以即时访问所有内容。

我的代码现在看起来像这样:

from openpyxl import workbook
wb = load_workbook('Path\to\Matrix.xlsx')
ws = wb.get_sheet_by_name('SomeMatrix')

def iter_cols(ws):                               #define your own iter_cols function which yields the cell values via for loop
  for col in ws.iter_cols():
     yield tuple(cell.value for cell in col)     #the yield statement returns a generator
c = tuple(iter_cols(ws))