使用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 list中append()与extend()用法分享
Mar 24 Python
Python编写检测数据库SA用户的方法
Jul 11 Python
基于Python的关键字监控及告警
Jul 06 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
Mar 30 Python
mac下pycharm设置python版本的图文教程
Jun 13 Python
python json.loads兼容单引号数据的方法
Dec 19 Python
Python实现的在特定目录下导入模块功能分析
Feb 11 Python
python图片二值化提高识别率代码实例
Aug 24 Python
Django框架创建项目的方法入门教程
Nov 04 Python
Python源码解析之List
May 21 Python
Pytorch 如何实现常用正则化
May 27 Python
Python办公自动化PPT批量转换操作
Sep 15 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中json_encode()和json_decode()
2014/05/25 PHP
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
2014/06/19 PHP
thinkPHP模型初始化实例分析
2015/12/03 PHP
ThinkPHP5&5.1框架关联模型分页操作示例
2019/08/03 PHP
JS随即打乱数组实现代码
2012/12/03 Javascript
Javascript图像处理—平滑处理实现原理
2012/12/28 Javascript
JavaScript中的操作符==与===介绍
2014/12/31 Javascript
JS打印组合功能
2016/08/04 Javascript
js封装tab标签页实例分享
2016/12/19 Javascript
微信小程序 switch组件详解及简单实例
2017/01/10 Javascript
node.js实现回调的方法示例
2017/03/01 Javascript
webpack配置文件和常用配置项介绍
2017/04/28 Javascript
通过V8源码看一个关于JS数组排序的诡异问题
2017/08/14 Javascript
基于react组件之间的参数传递(详解)
2017/09/05 Javascript
详解适配器在JavaScript中的体现
2018/09/28 Javascript
微信小程序学习笔记之跳转页面、传递参数获得数据操作图文详解
2019/03/28 Javascript
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
2019/06/18 jQuery
Element-ui upload上传文件限制的解决方法
2021/01/22 Javascript
[30:51]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第一局
2016/03/04 DOTA
利用Python的装饰器解决Bottle框架中用户验证问题
2015/04/24 Python
Python实现以时间换空间的缓存替换算法
2016/02/19 Python
学生信息管理系统python版
2018/10/17 Python
Python 一键制作微信好友图片墙的方法
2019/05/16 Python
python里 super类的工作原理详解
2019/06/19 Python
Python datetime模块使用方法小结
2020/06/18 Python
python 实现音频叠加的示例
2020/10/29 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
接口自动化多层嵌套json数据处理代码实例
2020/11/20 Python
html5 css3网站菜单实现代码
2013/12/23 HTML / CSS
澳大利亚电子产品购物网站:Dick Smith
2017/02/02 全球购物
数据员岗位职责
2013/11/19 职场文书
教师队伍管理制度
2014/01/14 职场文书
2014年祖国生日寄语
2014/09/19 职场文书
2014年销售助理工作总结
2014/12/01 职场文书
导游词之苏州盘门景区
2019/11/12 职场文书
Go Grpc Gateway兼容HTTP协议文档自动生成网关
2022/06/16 Golang