使用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 相关文章推荐
Python3基础之输入和输出实例分析
Aug 18 Python
Python爬取APP下载链接的实现方法
Sep 30 Python
Python实现的建造者模式示例
Aug 06 Python
在PyCharm中三步完成PyPy解释器的配置的方法
Oct 29 Python
Python数据类型之Dict字典实例详解
May 07 Python
Python使用pyserial进行串口通信的实例
Jul 02 Python
Django 模型类(models.py)的定义详解
Jul 19 Python
python定间隔取点(np.linspace)的实现
Nov 27 Python
python数据库编程 Mysql实现通讯录
Mar 27 Python
python3 中时间戳、时间、日期的转换和加减操作
Jul 14 Python
Python用K-means聚类算法进行客户分群的实现
Aug 23 Python
Python requests HTTP验证登录实现流程
Nov 05 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中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
2011/05/04 PHP
PHP启动windows应用程序、执行bat批处理、执行cmd命令的方法(exec、system函数详解)
2014/10/20 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
php-msf源码详解
2017/12/25 PHP
基于pthread_create,readlink,getpid等函数的学习与总结
2013/07/17 Javascript
纯js实现遮罩层效果原理分析
2014/05/27 Javascript
js 模式窗口(模式对话框和非模式对话框)的使用介绍
2014/07/17 Javascript
基于jQuery实现复选框的全选 全不选 反选功能
2014/11/24 Javascript
js调用百度地图及调用百度地图的搜索功能
2015/09/07 Javascript
js实现接收表单的值并将值拼在表单action后面的方法
2015/11/23 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
基于JQuery和DWR实现异步数据传递
2020/10/16 jQuery
vue-amap根据地址回显地图并mark的操作
2020/11/03 Javascript
[01:09:24]Ti4开幕式
2014/07/19 DOTA
[47:53]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#2COL VS Spirit
2016/03/02 DOTA
Python脚本实现虾米网签到功能
2016/04/12 Python
浅谈django model postgres的json字段编码问题
2018/01/05 Python
python自动登录12306并自动点击验证码完成登录的实现源代码
2018/04/25 Python
Python学习笔记之图片人脸检测识别实例教程
2019/03/06 Python
python单例模式的多种实现方法
2019/07/26 Python
安装多个版本的TensorFlow的方法步骤
2020/04/21 Python
Python使用OpenPyXL处理Excel表格
2020/07/02 Python
python+opencv实现车道线检测
2021/02/19 Python
浅析数据存储的三种方式 cookie sessionstorage localstorage 的异同
2020/06/04 HTML / CSS
微软瑞士官方网站:Microsoft瑞士
2018/04/20 全球购物
荷兰音乐会和音乐剧门票订购网站:Topticketshop
2019/08/27 全球购物
Timberland俄罗斯官方网上商店:全球领先的户外品牌
2020/03/15 全球购物
Bitiba意大利:在线宠物商店
2020/10/31 全球购物
安全施工责任书
2014/08/25 职场文书
六年级学生评语大全
2014/12/26 职场文书
第一书记观后感
2015/06/08 职场文书
住房公积金贷款工资证明
2015/06/12 职场文书
如何使用CocosCreator对象池
2021/04/14 Javascript
Java基础之线程锁相关知识总结
2021/06/30 Java/Android
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android
Spring中的@Transactional的工作原理
2022/06/05 Java/Android