使用Python封装excel操作指南


Posted in Python onJanuary 29, 2021

前言

openpyxl 是 python 中操作 excel 表格比较常用的一个库,可以读取和写入excel文件,支持【.xlsx / .xlsm / .xltx / .xltm】格式的文件,处理excel数据、公式、样式,且可以在表格内插入图表

但是在实际项目的使用过程中,如果经常要用到 openpyxl 进行操作,进行相应的封装,会事半功倍

结构说明

使用Python封装excel操作指南

- - config   配置文件夹
- - - - dir_config.py  配置文件路径等相关信息
- - - - excel_handler.py  用于封装excel操作
- - exceldir 表格文件存放路径
- - run.py   执行文件

代码解析

excel_handler.py

from openpyxl import load_workbook
from openpyxl.worksheet.worksheet import Worksheet


class ExcelHandler():
 '''
 操作Excel
 '''

 def __init__(self, file):
  '''初始化函数'''
  self.file = file

 def open_sheet(self, sheet_name) -> Worksheet:
  '''打开表单'''
  wb = load_workbook(self.file)
  sheet = wb[sheet_name]
  return sheet

 def read_header(self, sheet_name):
  '''获取表单的表头'''
  sheet = self.open_sheet(sheet_name)
  headers = []
  for i in sheet[1]:
   headers.append(i.value)
  return headers

 def read_rows(self,sheet_name):
  '''
  读取除表头外所有数据(除第一行外的所有数据)
  返回的内容是一个二维列表,若想获取每一行的数据,可使用for循环或*解包
  '''
  sheet = self.open_sheet(sheet_name)
  rows = list(sheet.rows)[1:]

  data = []
  for row in rows:
   row_data = []
   for cell in row:
    row_data.append(cell.value)
   data.append(row_data)

  return data

 def read_key_value(self,sheet_name):
  '''
  获取所有数据,且将表头中的内容与数据结合展示(以字典的形式)
  如:[
  {'序号':1,'会员卡号': '680021685898','机场名称':'上海机场'},
  {'序号':2,'会员卡号': '680021685899','机场名称':'广州机场'}
  ]
  '''
  sheet = self.open_sheet(sheet_name)
  rows = list(sheet.rows)

  # 获取标题
  data = []
  for row in rows[1:]:
   rwo_data = []
   for cell in row:
    rwo_data.append(cell.value)
    # 列表转换成字典,与表头里的内容使用zip函数进行打包
   data_dict = dict(zip(self.read_header(sheet_name),rwo_data))
   data.append(data_dict)
  return data


 @staticmethod
 def write_change(file,sheet_name,row,column,data):
  '''写入Excel数据'''
  wb = load_workbook(file)
  sheet = wb[sheet_name]

  # 修改单元格
  sheet.cell(row,column).value = data
  # 保存
  wb.save(file)
  # 关闭
  wb.close()

写入Excel数据这一步,使用了静态方法,原因是读取文件可以无需保存,而修改文件后,如果没有进行保存,而其他地方有调用了该方法,则会引起一些报错,所以,每对excel进行一次修改,都进行一次保存

dir_config.py

import os

# ExcelDemo 所在的绝对路径
base_dir = os.path.split(os.path.split(os.path.abspath(__file__))[0])[0]

# excel 文件放置目录
excel_dir = os.path.join(base_dir,'excedir')

使用Python封装excel操作指南

run.py

import os

from ExcelDemo.config.excel_handler import ExcelHandler
from ExcelDemo.config import dir_config

excelfile = os.path.join(dir_config.excel_dir,'航班信息.xlsx')


if __name__ == '__main__':
 excel = ExcelHandler(excelfile)
 header = excel.read_header('Sheet1')
 data = excel.read_rows('Sheet1')
 data2 = excel.read_key_value('Sheet1')

 print(header)
 '''
 ['序号', '会员卡号', '机场', '航班日期', '航班号']

 '''


 print('**********************************')
 print(data)
 '''
 [
 [1, '680021685898', '西安南航', 20200503, 'CZ6754'],
 [2, '189000177074', '(新疆)莎车机场', 20200603, 'CZ6880'], 
 [3, '480005387697', '新疆南航', 20200612, 'CZ5390'], 
 [4, '380025990156', '西安南航', 20200619, 'CZ6622']
 ]
 
 '''



 print('**********************************')
 print(data2)
 '''
 [
 {'序号': 1, '会员卡号': '680021685898', '机场': '西安南航', '航班日期':20200503, '航班号': 'CZ6754'},
 {'序号': 2, '会员卡号': '189000177074', '机场': '(新疆)莎车机场', '航班日期': 20200603, '航班号': 'CZ6880'}, 
 {'序号': 3, '会员卡号': '480005387697', '机场': '(新疆)库车', '航班日期': 20200612, '航班号': 'CZ5390'},
 {'序号': 4, '会员卡号': '380025990156', '机场': '西安南航', '航班日期': 20200619, '航班号': 'CZ6622'}
 ]
 
 '''

 excel.write_change(excelfile,'Sheet1',6,5,'新增内容')
 excel.write_change(excelfile,'Sheet1',2,3,'修改内容')

修改后表格内容

使用Python封装excel操作指南

总结

到此这篇关于使用Python封装excel操作的文章就介绍到这了,更多相关Python封装excel操作内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python转码问题的解决方法
Oct 07 Python
Python数据拟合与广义线性回归算法学习
Dec 22 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
Aug 31 Python
python 用opencv调用训练好的模型进行识别的方法
Dec 07 Python
对python_discover方法遍历所有执行的用例详解
Feb 13 Python
python列表插入append(), extend(), insert()用法详解
Sep 14 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
Oct 24 Python
在python shell中运行python文件的实现
Dec 21 Python
python连接打印机实现打印文档、图片、pdf文件等功能
Feb 07 Python
解决python运行效率不高的问题
Jul 20 Python
基于Python中Remove函数的用法讨论
Dec 11 Python
python3 kubernetes api的使用示例
Jan 12 Python
用OpenCV进行年龄和性别检测的实现示例
Jan 29 #Python
python使用numpy中的size()函数实例用法详解
Jan 29 #Python
Python机器学习工具scikit-learn的使用笔记
Jan 28 #Python
K近邻法(KNN)相关知识总结以及如何用python实现
Jan 28 #Python
Python3中对json格式数据的分析处理
Jan 28 #Python
Python实现微信表情包炸群功能
Jan 28 #Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
Jan 28 #Python
You might like
PHP MemCached高级缓存配置图文教程
2010/08/05 PHP
codeigniter集成ucenter1.6双向通信的解决办法
2014/06/12 PHP
php定界符
2014/06/19 PHP
摘自织梦CMS的HTTP文件下载类
2015/08/08 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
2019/10/17 PHP
Jquery实现兼容各大浏览器的Enter回车切换输入焦点的方法
2014/09/01 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
JS实现网页标题栏显示当前时间和日期的完整代码
2015/11/02 Javascript
JS获取当前脚本文件的绝对路径
2016/03/02 Javascript
iframe中使用jquery进行查找的方法【案例分析】
2016/06/17 Javascript
CSS+jQuery实现简单的折叠菜单
2016/12/20 Javascript
discuz表情的JS提取方法分析
2017/03/22 Javascript
nginx+vue.js实现前后端分离的示例代码
2018/02/12 Javascript
编写一个javascript元循环求值器的方法
2020/04/14 Javascript
WebStorm无法正确识别Vue3组合式API的解决方案
2021/02/18 Vue.js
[48:31]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第二场 12.17
2020/12/19 DOTA
python使用正则表达式替换匹配成功的组并输出替换的次数
2017/11/22 Python
Pandas 数据处理,数据清洗详解
2018/07/10 Python
python爬虫神器Pyppeteer入门及使用
2019/07/13 Python
Python unittest如何生成HTMLTestRunner模块
2020/09/08 Python
python3实现飞机大战
2020/11/29 Python
解决python3输入的坑——input()
2020/12/05 Python
英国、欧洲和全球租车服务:Avis英国
2016/08/29 全球购物
掌上明珠Java程序员面试总结
2016/02/23 面试题
职业生涯规划书基本格式
2014/01/06 职场文书
新员工试用期自我鉴定
2014/04/17 职场文书
经贸专业毕业生求职信范文
2014/05/01 职场文书
写得不错的求职信范文
2014/07/11 职场文书
关于感恩的演讲稿500字
2014/08/26 职场文书
课内比教学心得体会
2014/09/09 职场文书
村干部四风问题整改措施
2014/09/30 职场文书
餐饮店长岗位职责
2015/04/14 职场文书
2016年“9.22”世界无车日活动小结
2016/04/05 职场文书
Python实现socket库网络通信套接字
2021/06/04 Python
pycharm安装深度学习pytorch的d2l包失败问题解决
2022/03/25 Python
python中filter,map,reduce的作用
2022/06/10 Python