使用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中使用异步Socket编程性能测试
Jun 25 Python
Python3连接MySQL(pymysql)模拟转账实现代码
May 24 Python
使用python编写udp协议的ping程序方法
Apr 22 Python
matplotlib savefig 保存图片大小的实例
May 24 Python
python 将对象设置为可迭代的两种实现方法
Jan 21 Python
python3.5安装python3-tk详解
Apr 26 Python
OpenCV 边缘检测
Jul 10 Python
python 的numpy库中的mean()函数用法介绍
Mar 03 Python
pandas抽取行列数据的几种方法
Dec 13 Python
如何理解python接口自动化之logging日志模块
Jun 15 Python
使用python求解迷宫问题的三种实现方法
Mar 17 Python
如何基于python实现单目三维重建详解
Jun 25 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处理斐波那契数列非递归方法
2012/02/04 PHP
PHP fopen()和 file_get_contents()应用与差异介绍
2014/03/19 PHP
PHP递归获取目录内所有文件的实现方法
2016/11/01 PHP
PHP读取XML格式文件的方法总结
2017/02/27 PHP
JavaScript 设计模式学习 Singleton
2009/07/27 Javascript
JSON 入门指南 想了解json的朋友可以看下
2009/08/26 Javascript
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
2013/01/11 Javascript
javascript full screen 全屏显示页面元素的方法
2013/09/27 Javascript
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
2013/12/06 Javascript
jquery fancybox ie6不显示关闭按钮的解决办法
2013/12/25 Javascript
二叉树的非递归后序遍历算法实例详解
2014/02/07 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
javascript实现简单的省市区三级联动
2015/05/14 Javascript
基于javascript实现动态显示当前系统时间
2016/01/28 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
JavaScript简单实现的仿微博留言功能示例
2019/01/17 Javascript
详解Python使用simplejson模块解析JSON的方法
2016/03/24 Python
Python数据可视化编程通过Matplotlib创建散点图代码示例
2017/12/09 Python
Python-Seaborn热图绘制的实现方法
2019/07/15 Python
Python循环实现n的全排列功能
2019/09/16 Python
Python面向对象原理与基础语法详解
2020/01/02 Python
利用 PyCharm 实现本地代码和远端的实时同步功能
2020/03/23 Python
python nohup 实现远程运行不宕机操作
2020/04/16 Python
python 如何调用 dubbo 接口
2020/09/24 Python
MANGO官方网站:西班牙芒果服装品牌
2017/01/15 全球购物
string = null 和string = ''的区别
2013/04/28 面试题
一些Solaris面试题
2015/12/22 面试题
解除劳动合同协议书范本
2014/04/14 职场文书
关于雷锋的演讲稿
2014/05/10 职场文书
终止劳动合同协议书
2014/10/05 职场文书
MongoDB orm框架的注意事项及简单使用
2021/06/20 MongoDB
新手初学Java List 接口
2021/07/07 Java/Android
Redis之RedisTemplate配置方式(序列和反序列化)
2022/03/13 Redis
六个好看实用的 HTML + CSS 后台登录入口页面
2022/04/28 HTML / CSS
科学家研发出新型速效酶,可在 24 小时内降解塑料制品
2022/04/29 数码科技