使用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生态系统(Python新手入门指导)
Dec 11 Python
Python将多个excel文件合并为一个文件
Jan 03 Python
使用Python写一个小游戏
Apr 02 Python
详解flask入门模板引擎
Jul 18 Python
Python读取mat文件,并保存为pickle格式的方法
Oct 23 Python
django使用LDAP验证的方法示例
Dec 10 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
Sep 11 Python
Django实现图片上传功能步骤解析
Apr 22 Python
Python通过类的组合模拟街道红绿灯
Sep 16 Python
pytorch __init__、forward与__call__的用法小结
Feb 27 Python
python编写函数注意事项总结
Mar 29 Python
Python道路车道线检测的实现
Jun 27 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生成扇形比例图实例
2013/11/06 PHP
如何使用php实现评委评分器
2015/07/31 PHP
PHP实现简单登录界面
2019/10/23 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
2020/04/26 PHP
Javascript 表单之间的数据传递代码
2008/12/04 Javascript
用jquery写的一个万年历(自写)
2014/01/20 Javascript
jquery调整表格行tr上下顺序实例讲解
2016/01/09 Javascript
JavaScript 数据类型详解
2017/03/13 Javascript
干货!教大家如何选择Vue和React
2017/03/13 Javascript
jquery实现一个全局计时器(商城可用)
2017/06/30 jQuery
javascript回调函数详解
2018/02/06 Javascript
详解webpack打包第三方类库的正确姿势
2018/10/20 Javascript
Vue $mount实战之实现消息弹窗组件
2019/04/22 Javascript
vue 指令和过滤器的基本使用(品牌管理案例)
2019/11/04 Javascript
解决Can't find variable: SockJS vue项目的问题
2020/09/22 Javascript
Python Socket编程详细介绍
2017/03/23 Python
浅谈Python中的可变对象和不可变对象
2017/07/07 Python
python发送告警邮件脚本
2018/09/17 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
2018/12/20 Python
python cumsum函数的具体使用
2019/07/29 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
2019/10/25 Python
python爬虫实现POST request payload形式的请求
2020/04/30 Python
解决使用Pandas 读取超过65536行的Excel文件问题
2020/11/10 Python
请编程遍历页面上所有 TextBox 控件并给它赋值为 string.Empty
2015/12/03 面试题
北京某科技有限公司C# .net笔试题
2014/09/27 面试题
保荐人的岗位职责
2013/11/19 职场文书
个人素质的自我评价分享
2013/12/16 职场文书
土建资料员岗位职责
2014/01/04 职场文书
2015年公务员工作总结
2015/04/24 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
2019运动会广播加油稿汇总
2019/08/21 职场文书
500字作文之关于爸爸
2019/11/14 职场文书
Nginx配置https的实现
2021/11/27 Servers
Python帮你解决手机qq微信内存占用太多问题
2022/02/15 Python
Nginx虚拟主机的配置步骤过程全解
2022/03/31 Servers
彻底弄懂Python中的回调函数(callback)
2022/06/25 Python