使用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实现对一个完整url进行分割的方法
Apr 29 Python
如何使用python爬取csdn博客访问量
Feb 14 Python
Python 的类、继承和多态详解
Jul 16 Python
python+selenium开发环境搭建图文教程
Aug 11 Python
Python3.5编程实现修改IIS WEB.CONFIG的方法示例
Aug 18 Python
基于Python对数据shape的常见操作详解
Dec 25 Python
python中sort和sorted排序的实例方法
Aug 26 Python
Python第三方库的几种安装方式(小结)
Apr 03 Python
matlab中二维插值函数interp2的使用详解
Apr 22 Python
协程Python 中实现多任务耗资源最小的方式
Oct 19 Python
利用Python pandas对Excel进行合并的方法示例
Nov 04 Python
VSCODE配置Markdown及Markdown基础语法详解
Jan 19 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
Discuz 5.0 中读取纯真IP数据库函数分析
2007/03/16 PHP
php park、unpark、ord 函数使用方法(二进制流接口应用实例)
2010/10/19 PHP
php天翼开放平台短信发送接口实现方法
2014/12/22 PHP
浅谈PHP中Stream(流)
2015/06/08 PHP
用JTrackBar实现的模拟苹果风格的滚动条
2007/08/06 Javascript
CSS和Javascript简单复习资料
2010/06/29 Javascript
复选框全选与全不选操作实现思路
2013/08/18 Javascript
nodeType属性返回被选节点的节点类型介绍
2013/11/22 Javascript
js实现的折叠导航示例
2013/11/29 Javascript
浅析javascript 定时器
2014/12/23 Javascript
AngularJS使用ng-repeat指令实现下拉框
2016/08/23 Javascript
JS 拼凑字符串的简单实例
2016/09/02 Javascript
javascript基础练习之翻转字符串与回文
2017/02/20 Javascript
Angular.Js之Scope作用域的学习教程
2017/04/27 Javascript
使用bootstrap插件实现模态框效果
2017/05/10 Javascript
简单实现jquery隔行变色
2017/11/09 jQuery
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
Angular6 Filter实现页面搜索的示例代码
2018/12/02 Javascript
JavaScript中关于base64的一些事
2019/05/06 Javascript
JavaScript实现横版菜单栏
2020/03/17 Javascript
通过实例解析js可枚举属性与不可枚举属性
2020/12/02 Javascript
python查找目录下指定扩展名的文件实例
2015/04/01 Python
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
Python面向对象类继承和组合实例分析
2018/05/28 Python
浅谈python中对于json写入txt文件的编码问题
2018/06/07 Python
Django与pyecharts结合的实例代码
2020/05/13 Python
Python sorted对list和dict排序
2020/06/09 Python
利用html5的websocket实现websocket聊天室
2013/12/12 HTML / CSS
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
写一个用矩形法求定积分的通用函数
2012/11/08 面试题
土木工程专业自荐信
2013/10/04 职场文书
法人代表授权委托书范文
2014/09/10 职场文书
南极大冒险观后感
2015/06/05 职场文书
优质服务心得体会(共4篇)
2016/01/22 职场文书
高一作文之暖冬
2019/11/09 职场文书
python四种出行路线规划的实现
2021/06/23 Python