安装
pip install openpyxl
使用方式
创建工作表
from openpyxl import Workbook # 新建工作表 wb = Workbook() # 选择默认的工作簿 sheet = wb.active # 给工作簿重命名 sheet.title = '考勤表' # 指定保存的路径及表名 wb.save('../考勤表.xlsx')
创建工作簿
语法:打开工作表对象.create_sheet(title='工作簿名字')
import openpyxl #读取存在的工作表 wb = openpyxl.load_workbook('有基础资料和库存.xlsx') #创建新的工作簿 wb.create_sheet(title='工作簿2') #保存 wb.save('有基础资料和库存.xlsx')
读取
- 导包:import openpyxl
- 打开Excel文件:wb = openpyxl . load_workbook(excel文件路径)
- 打开工作表:
-
- ws = wb[ 表单名 ]
- 获取工作表的属性信息(工作表的 所有行数 和 列数):
-
- ws.max_row
- ws.max_colomn
- 读取工作表的内容:
-
- 读取一行:ws . iter_rows(max_row=1) 默认返回 一行一个元组地址,通过遍历成单元格获取对应的值 :(<Cell 'dl'.A1>, <Cell 'dl'.B1>)
-
- 读取 到所有行 的数据:list ( ws . iter_rows ( ) ) 以行方式获取所有数据地址,存至列表中
-
- 读取一列:ws . iter_cols(max_col=1)
-
- 读取单元格:ws.cell ( 第几行, 第几列 ) .value
ws[单元格].value 如:ws['A1'].value
-
- 读取所有内容:list ( ws.values ) 默认返回一个 (一行一个元组 ) 的存储地址,用 list() 迭代获取值
-
-
- ws.values 输出结果为generator生成器, 使用list()函数对生成器进行迭代,values后千万不要加 () 号
-
def read_excel('文件地址', '表单名'): # 读取excel到代码中 workbook = openpyxl.load_workbook('文件地址') sh = workbook['表单名'] # 获取到 所有行 的数据 res = list(sh.values) cases = [] # 获取 第一行 的数据 title = [i for i in res[0]] # 遍历 第一行之外 的其他行 for item in res[1:]: # 以第一行为键,其它行为值 组成字典 dic = dict(zip(title, item)) # 添加到列表中 cases.append(dic) # 返回读取出来的数据,类型是 列表嵌套 字典 return cases
写入
语法:工作簿对象.append(['数据1','数据2'])
在表的最后一行写入 一行 数据,如果需要 写入多行,就写多条该语句,或利用循环遍历
- 新建表来写入
-
- 每次保存的路径和表名 一样保存的数据就会是最新的,旧的数据将 自动删除
- 打开已有的表来写入
-
- 打开已有的工作表和工作簿,在表中 写入数据,旧的数据 不会删除
from openpyxl import Workbook # 新建工作簿 wb = Workbook() # 选择默认的工作簿 sheet = wb.active # 给工作簿重命名 sheet.title = '考勤表' data = [ ['姓名', '出勤天数', '迟到次数'], ['batman', 20, 5], ['spiderman', 22, 0] ] # 写入多行数据 for row in data: sheet.append(row) # 往某个单元格子写入数据 # sheet['A1'] = 'superman' # 指定保存的路径及表名 wb.save('../考勤表.xlsx')
import openpyxl # 打开已有的工作表,在表中 写入数据,以前的数据不变 wb = openpyxl.load_workbook('../考勤表.xlsx') sheet = wb['考勤表'] data = [ ['姓名', '出勤天数', '迟到次数'], ['batman', 20, 5], ['spiderman', 22, 0] ] # 写入多行数据 for row in data: sheet.append(row) # 往某个单元格子写入和修改数据 # sheet['A1'] = 'superman' # 指定保存的路径及表名 (也可以是打开表的路径及表名) wb.save('../考勤表.xlsx')
修改
修改单个单元格内容
import openpyxl # 打开已有的工作表,在表中 写入数据,以前的数据不变 wb = openpyxl.load_workbook('../考勤表.xlsx') sheet = wb['考勤表1'] # 往某个单元格子写入和修改数据 sheet['A1'] = 'superman' # 指定保存的路径及表名 (也可以是打开表的路径及表名) wb.save('../ds/考勤表.xlsx')
修改所有内容,利用 删除所有行 再 写入新的数据
import openpyxl # 打开已有的工作表,在表中 写入数据,以前的数据不变 wb = openpyxl.load_workbook('../考勤表.xlsx') sheet = wb['考勤表1'] data = [ ['姓名', '出勤天数', '迟到次数'], ['batman', 20, 5], ['spiderman', 22, 0] ] # 删除 所有行 sheet.delete_rows(1, sheet.max_row) # 重新写入 数据 for row in data: sheet.append(row) # 指定保存的路径及表名 (也可以是打开表的路径及表名) wb.save('../考勤表.xlsx')
删除
从第一行开始 删除
语法:指定工作簿对象.delete_rows(从第几行开始删除, 删除几行) 第一行开始就 设置成 1
# 打开已有的工作表 wb = openpyxl.load_workbook('../考勤表.xlsx') # 指定工作簿 sheet = wb['考勤表1'] # 删除 所有行 (保留第一行就设置成 2) sheet.delete_rows(1, sheet.max_row) # 保存 wb.save('../考勤表.xlsx')