Python中如何将Excel整行/整列存储为变量及openpyxl取值报错解决
报错原因
openpyxl 工作表对象的 .columns 属性返回的是生成器(generator)对象,本身不支持下标索引操作,因此直接写 wb['sheet2'].columns["B"] 时,会触发 TypeError: 'generator' object is not subscriptable 报错。
该生成器的迭代逻辑是逐列输出整列单元格组成的元组,既不支持按列名字符串做索引,也没有可直接调用的 .values 属性。
整列数据存储到单个变量的可行方案
- 最推荐的简洁实现:
openpyxl 的工作表本身支持直接传入列名字符串(如'B')获取整列的单元格迭代器,遍历过程中读取每个单元格的.value属性,即可将整列所有数据存入单个列表变量:import openpyxl wb = openpyxl.load_workbook("coordinates.xlsx") sh2 = wb['sheet2'] # 提取sheet2中B列全部单元格值,存入x1变量 x1 = [cell.value for cell in sh2['B']] print(x1) - 空值过滤版本:
如果不需要保留空单元格的None值,可以在遍历时增加判断条件,过滤无内容的单元格:x1 = [cell.value for cell in sh2['B'] if cell.value is not None] - 基于
.columns属性的兜底实现(不推荐):
若一定要使用.columns属性,必须先将生成器转换为列表结构,再通过数字索引定位目标列。其中A列对应索引0,B列对应索引1:# 仅作原理演示,扫描全表结构的效率低于直接列名索引 columns_list = list(wb['sheet2'].columns) b_column_cell_tuples = columns_list[1] x1 = [cell.value for cell in b_column_cell_tuples]
注意:openpyxl 遍历时会扫描所有曾经被编辑过的行,哪怕当前行内容为空,也会被纳入列的遍历范围,不需要空值时记得按上面的方案增加过滤条件即可。
内容的提问来源于stack exchange,提问作者user15718454
相关产品推荐
相关产品推荐

