当前位置:   article > 正文

python:openpyxl取某一行、某一列、应用excel函数_openpyxl 读取一行

openpyxl 读取一行

前言:

(话外:如何取某一列这个,真的是气死我气死我气死我拉!)

依然记录学习使用,属于昨天内容的进阶版!

如果想要基础操作,如创建excel,创建sheet,可以点击下方链接哦~

 python:openpyxl基础操作(一):创建.xlsx文件_豆包的戳苏的博客-CSDN博客

取某一行:

首先,我们快速创建一个表格:

  1. from openpyxl import Workbook
  2. from openpyxl import load_workbook
  3. wb = Workbook() # pay attention to the first letter
  4. sheet_2 = wb.create_sheet('sheet_2')
  5. for i in range(1, 20):
  6. for j in range(1, 20):
  7. sheet_2.cell(i, j, value=j*i)

 

数据够多了。

这时,我们需要了解到,行和列是怎么构成的。下面插播一条手动输入数据的代码(和其它内容无关,只是用来区别行和列的不同) 

  1. rows = (
  2. (998, 997, 996),
  3. (787, 988, 876),
  4. (233, 445, 786)
  5. )
  6. for row in rows:
  7. sheet.append(row)

 

根据自己输入数据创建excel表格可知,每一行都是一个元组,每一列则不是元组(他是个generator)。 

这个认知非常重要!!

所以在取全部行的时候,很简单,我们只需要遍历一遍表格,得到单个元组,再遍历一遍元组,得到单个对象,并获取它的值。

这个非常简单,两次迭代即可搞定,就不放代码la。

可以选择直接print,也可以创建列表,放在列表里。

如果想要列表好看,就创建两个列表,组成一个二位列表……(就有点类似于dataframe拉嘿嘿串台了)。

我要输出某一行的值:

  1. for i in sheet_2[5]:
  2. print(i.value, end='\t')
  3. print()
  4. '''
  5. 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95
  6. '''

注意:这里,我输入的是5,他输出的是第五行。

和python中index的取值不同,这里输入0,会报错。因为行列都是从1开始的。

取某一列:

行,是一个元组,输出很方便,那么列怎么办呢?

如果上述代码,会直接报错。

我们可以先尝试输出全部的“列”:

  1. list1 = []
  2. for col1 in sheet_2.columns:
  3. list_1 = []
  4. for col_1 in col1:
  5. list_1.append(col_1.value)
  6. list1.append(list_1)
  7. print(list1)
  8. print(list1[0])

list1是二维列表,list_1是二维列表中的一维列表。

如果想要输出某一行,可以直接利用index。

但是这样很麻烦,数据太多的话,就很慢,能不能只单纯的输出一列?

能。

  1. sheet_2_col = tuple(sheet_2.columns)
  2. for i in range(0, 4):
  3. for j in sheet_2_col[i]:
  4. print(j.coordinate, j.value, end="\t")
  5. print()

以上我取的是1~4列,即:A-D列,输出的是其标号+值。但为什么我写了0?刚刚不是说,没有0吗?

因为我把“列”变成了元组。

元组可以有0。

其实这个方法在处理多数据的时候还是有弊端,我们看看下一个方法。

  1. for i in sheet_2.rows:
  2. for j in i:
  3. if 'A' in j.coordinate:
  4. print(j.coordinate, j.value, end='\t')
  5. print()

这里只输出了A列。

依然需要遍历一遍才行。

应用excel里的函数:

  1. for i in range(1, 20):
  2. sheet_2[f"T{i}"] = f'=AVERAGE(A{i}:S{i})'
  3. sheet_2[f"U{i}"] = f'=SUM(A{i}:S{i})'
  4. sheet_2['V1'] = 'AVERAGE'
  5. sheet_2['W1'] = 'Sum'
  6. for i in range(2, 20):
  7. sheet_2[f"V{i}"] = f'=AVERAGE(B{i}:S{i})'
  8. sheet_2[f"W{i}"] = f'=SUM(B{i}:S{i})'

上面有很多小细节需要注意,{i}用来占位,f就是excel里面那个f,注意,引号在等号前面!

如果列表头要添加文字

很简单拉,直接修改单元格内容,并注意公式容纳数据的范围即可。 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/972849
推荐阅读
相关标签
  

闽ICP备14008679号