Openpyxl笔记

Openpyxl笔记

常用方法

01安装

1、找到pip3.exe所在的文件夹,复制路径
我的路径是:C:\Users\孙艺航\AppData\Local\Programs\Python\Python37\Scripts


2、按Win+R,输入CMD确定

3、进入后,先输入cd 路径 回车

4、输入 pip3 install openpyxl 回车

pip install openpyxl

或

pip3 install openpyxl


今后如果遇到库出问题解决方法:
(1)卸载出问题的库
pip uninstall pandas
pip uninstall openpyxl
(2)重新安装
python -m pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
python -m pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple

02工作簿

1、创建工作簿
工作簿=openpyxl.Workbook('文件名称.xlsx')
工作簿.save(路径)
2、打开工作簿
工作簿 =openpyxl.load_workbook('文件名称.xlsx')
工作表 = 工作簿 ['工作表名']

03工作表

从工作簿中获取工作表
(1)获取工作表的名称
		工作簿 .sheetnames
(2)指定工作表
		工作簿 ['工作表名称']
(3)激活第一个工作表
		工作簿.active
(4)获取工作表名称
		工作表.title


freeze_panes,参数比较特别,主要用于在表格较大时冻结顶部的行或左边的行。对于冻结的行,在用户滚动时,
是始终可见的,可以设置为一个Cell对象或一个端元个坐标的字符串,单元格上面的行和左边的列将会冻结(单元格所在的行和列不会被冻结)。
例如我们要冻结第一行那么设置A2为freeze_panes,如果要冻结第一列,freeze_panes取值为B1,如果要同时冻结第一行和第一列,
那么需要设置B2为freeze_panes,freeze_panes值为none时!表示 不冻结任何列。

04单元格

01.工作簿新建、保存和打开

一、新建和保存
import openpyxl as vb
路径 = r'c:/孙兴华.xlsx'
# 注意:
# 1. 使用Workbook新建,首字母大写 
# 2. 别忘记保存
工作簿 = vb.Workbook(路径) 
工作簿.save(路径1)

二、打开工作簿
import openpyxl as vb
路径 = r'c:/001.xlsx'
# 注意:
# 1. 指定工作簿
# 2. 指定工作表
工作簿 = vb.load_workbook(路径)
工作表 = 工作簿['1月']
print(工作表)

关于工作表的相关属性,查阅常用代码04

三、激活工作表,默认第0个
工作表 = 工作簿.active

02.工作表的创建、删除、复制

一、显示工作簿中所有的工作表和表名
import openpyxl as vb
路径 = r'c:/001.xlsx'
工作簿 = vb.load_workbook(路径)
显示所有工作表 = 工作簿.worksheets
for 工作表 in 显示所有工作表:
    print(工作表.title)

二、删除指定工作表
import openpyxl as vb
路径 = r'c:/001.xlsx'
工作簿 = vb.load_workbook(路径)
# 步骤:
# 1.给工作表指定对象
# 2.用remove删除这个对象
工作表 = 工作簿['4月']
工作簿.remove(工作表)
工作簿.save(路径)

三、新建指定工作表
import openpyxl as vb
路径 = r'c:/001.xlsx'
工作簿 = vb.load_workbook(路径)
工作簿.create_sheet('4月')
工作簿.save(路径)

四、复制指定工作表
import openpyxl as vb
路径 = r'c:/测试.xlsx'
工作簿 = vb.load_workbook(路径)
复制表 = 工作簿.copy_worksheet(工作簿['9月']) # 这里是工作表对象
复制表.title = '我是刚复制的表'
工作簿.save(路径)

练习

练习1:新建100张工作表
import openpyxl as vb
路径 = r'c:/测试.xlsx'
工作簿 = vb.Workbook(路径) # 打开工作簿
for i in range(1,101):
    工作簿.create_sheet(str(i) + '月')
工作簿.save(路径)

练习2:除了9月份的工作表以外都删除
import openpyxl as vb
路径 = r'c:/测试.xlsx'
工作簿 = vb.load_workbook(路径) # 打开工作簿
显示所有工作表 = 工作簿.worksheets
for 工作表 in 显示所有工作表:
    if 工作表.title != '9月':
    	# 如果表名是:
	#北京-01,北京-02,上海-01,上海-02
	# if 工作表.title.split("-")[0]  != '北京':
        工作表 = 工作簿[工作表.title]
        工作簿.remove(工作表)
工作簿.save(路径)

练习3:批量修改工作表的名称
import openpyxl as vb
路径 = r'c:/模板.xlsx'
工作簿 = vb.load_workbook(路径)
显示所有工作表 = 工作簿.worksheets
for 工作表 in 显示所有工作表:
        工作表.title = '北京' + 工作表.title
工作簿.save(路径)

练习4:将模板批量复制
import openpyxl as vb
路径 = r'c:/模板.xlsx'
工作簿 = vb.load_workbook(路径)
for i in range(1,32):
    复制表 = 工作簿.copy_worksheet(工作簿['Sheet1'])
    复制表.title = '7月'+ str(i) + '日'
工作簿.remove(工作簿['Sheet1']) # 把模板删除
工作簿.save(路径)

03.工作表中单元格的操作

一、获取一个单元格的值

import openpyxl as vb
路径 = r'c:/测试.xlsx'
工作簿 = vb.load_workbook(路径)
# 单元格 = 工作簿['1月']['A1'].value
# 单元格 = 工作表.cell(row=1,column=1).value
# 工作表 = 工作簿.worksheets[0]
工作表 = 工作簿['Sheet1']
单元格 = 工作表['A1'].value
print(单元格)

# VBA中表示单元格:
# range('A1')
# cells(行,列)

二、获取第2列1、3、5、7行的数据

import openpyxl as vb
路径 = r'c:/测试.xlsx'
工作簿 = vb.load_workbook(路径)
工作表 = 工作簿['Sheet1']
for i in range(1,8,2):
    print(i,工作表.cell(row=i,column=2).value)

3.1获取一个区域的单元格

import openpyxl as vb
路径 = r'c:/测试.xlsx'
工作簿 = vb.load_workbook(路径)
工作表 = 工作簿['Sheet1']
单元格区域 = 工作表['A1:C10']
# 单元格区域 = 工作表['1:10']==========按行的优势:这一行所有使用的单元格都会获取到,新增列也可以获取到
# 单元格区域 = 工作表['A:C']===========按列的优势:取完一列的数据之后再取下一列。【这是唯一的按列取数据】
for 数据 in 单元格区域:    # 循环每行
    for 单元格 in 数据:   # 循环每个单元格
        print(单元格.value)

例1:使用list(工作表.values)

import openpyxl as vb
路径 = r'c:/测试.xlsx'
工作簿 = vb.load_workbook(路径)
工作表 = 工作簿['Sheet1']
# 只能对整个工作表操作,不能对单独区域操作
# print(list(工作表.values)[1:3])
# 可以用切片的方式截取某一段数据
print(list(工作表.values))

例2:.iter_rows(min_row=最低行数,max_row=最高行数,min_col=最低列数,max_col=最高列数)
[一般情况下只需要定位起点]

import openpyxl as vb
路径 = r'c:/测试.xlsx'
工作簿 = vb.load_workbook(路径) 
工作表 = 工作簿['Sheet1']  
# 行和列的范围  iter_cols按列
# 						行,行,列,列
for 行 in 工作表.iter_rows(min_row=1,max_row=10,min_col=1,max_col=3):
    for 单元格 in 行: 
        print(单元格.value)
        
        
或:


import openpyxl as vb
路径 = r'c:/测试.xlsx'
工作簿 = vb.load_workbook(路径) 
工作表 = 工作簿['Sheet1']
for 列 in 工作表.iter_cols(min_row=1,max_row=10,min_col=1,max_col=3):
    for 单元格 in 列: 
        print(单元格.value)

3.1.1获取每一行,每一列

import openpyxl as vb
路径 = r'c:/测试.xlsx'
工作簿 = vb.load_workbook(路径)
工作表 = 工作簿['Sheet1']
# 因为按行,所以返回A1, B1, C1这样的顺序
for 行 in 工作表.rows:
    for 单元格 in 行:
        print(单元格.value)
# A1, A2, A3这样的顺序
for 列 in 工作表.columns:
    for 单元格 in 列:
        print(单元格.value)

3.1.2列字母和数字之间的转换

import openpyxl as vb
# 根据列的数字返回字母
# 使用这些函数时,不必加载一个工作簿
数字转字母 = vb.utils.get_column_letter(2)
print(数字转字母)
# 根据字母返回列的数字
字母转数字 = vb.utils.column_index_from_string('D')
print(字母转数字)

3.2读取数据

import openpyxl as vb
路径 = r'c:/测试2.xlsx'
工作簿 = vb.load_workbook(路径)
工作表 = 工作簿['Sheet1']
最大行 = 工作表.max_row
最大列 = 工作表.max_column
A1单元格的值 = 工作表['A1'].value
A1单元格的值2 = 工作表.cell(1,1).value
A1单元格的列 = 工作表['A1'].column
A1单元格的行 = 工作表['A1'].row
# 获取C列所有数据
列表1 = []
for i in 工作表['C']:
    列表1.append(i.value)
# 获取第1行所有数据
列表2 = []
for i in 工作表[1]:
    列表2.append(i.value)
# 获取所有数据
列表3 = []
for 行 in 工作表.rows:
    for 单元格 in 行:
        列表3.append(单元格.value)
print(列表3)

3.3写入数据

一、向一个单元格写入数据

import openpyxl as vb
路径 = r'c:/测试2.xlsx'
工作簿 = vb.load_workbook(路径)
工作表 = 工作簿['Sheet1']
工作表.cell(1,5,value='孙兴华')
工作表['E2']='兴华'
工作簿.save(路径)

二、在最后一列写入数据

工作表.append(列表)

三,向一个区域内写入数据

for 行 in 工作表['A1:B4']:
	for 单元格 in 行:
	    单元格.value = 520
posted @ 2022-10-24 16:24  鞭码形动  阅读(201)  评论(0编辑  收藏  举报