使用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中文件遍历的两种方法
Jun 16 Python
Python实现合并字典的方法
Jul 07 Python
在django中使用自定义标签实现分页功能
Jul 04 Python
Python rstrip()方法实例详解
Nov 11 Python
python文件拆分与重组实例
Dec 10 Python
在python plt图表中文字大小调节的方法
Jul 08 Python
Python编写带选项的命令行程序方法
Aug 13 Python
Python完全识别验证码自动登录实例详解
Nov 24 Python
Python使用扩展库pywin32实现批量文档打印实例
Apr 09 Python
keras中的卷积层&池化层的用法
May 22 Python
基于python纯函数实现井字棋游戏
May 27 Python
python+selenium爬取微博热搜存入Mysql的实现方法
Jan 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
Laravel框架定时任务2种实现方式示例
2018/12/08 PHP
如何通过PHP实现Des加密算法代码实例
2020/05/09 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
2021/03/09 PHP
javascript读取RSS数据
2007/01/20 Javascript
两个DIV等高的JS的实现代码
2007/12/23 Javascript
JavaScript 学习小结(适合新手参考)
2009/07/30 Javascript
jQuery源码分析-02正则表达式 RegExp 常用正则表达式
2011/11/14 Javascript
JS cookie中文乱码解决方法
2014/01/28 Javascript
js中取得变量绝对值的方法
2015/01/03 Javascript
JS中dom0级事件和dom2级事件的区别介绍
2016/05/05 Javascript
JavaScript中removeChild 方法开发示例代码
2016/08/15 Javascript
浅谈js键盘事件全面控制
2016/12/01 Javascript
Vue.js实现一个SPA登录页面的过程【推荐】
2017/04/29 Javascript
React-router 4 按需加载的实现方式及原理详解
2017/05/25 Javascript
再谈Angular4 脏值检测(性能优化)
2018/04/23 Javascript
AngularJS使用$http配置对象方式与服务端交互方法
2018/08/13 Javascript
js实现图片上传到服务器和回显
2020/01/19 Javascript
jquery实现上传图片功能
2020/06/29 jQuery
H5+css3+js搭建带验证码的登录页面
2020/10/11 Javascript
小程序实现上下切换位置
2020/11/16 Javascript
Python找出list中最常出现元素的方法
2016/06/14 Python
python中使用正则表达式的连接符示例代码
2017/10/10 Python
简单了解Django模板的使用
2017/12/20 Python
在python 中split()使用多符号分割的例子
2019/07/15 Python
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
Python及Pycharm安装方法图文教程
2019/08/05 Python
Django集成celery发送异步邮件实例
2019/12/17 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
2020/03/11 Python
Python是什么 Python的用处
2020/05/26 Python
大韩航空官方网站:Korean Air
2017/10/25 全球购物
Linux操作面试题
2015/02/11 面试题
会计专业毕业生推荐信
2013/11/05 职场文书
优秀护士演讲稿
2014/04/30 职场文书
早读课迟到检讨书
2014/09/25 职场文书
MySQL 数据类型选择原则
2021/05/27 MySQL
APP界面设计技巧和注意事项
2022/04/29 杂记