使用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 相关文章推荐
35个Python编程小技巧
Apr 01 Python
在Python中使用元类的教程
Apr 28 Python
Python机器学习logistic回归代码解析
Jan 17 Python
Python 元类实例解析
Apr 04 Python
Python使用numpy模块创建数组操作示例
Jun 20 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
Aug 06 Python
python lambda表达式在sort函数中的使用详解
Aug 28 Python
python实现在多维数组中挑选符合条件的全部元素
Nov 26 Python
Python转换itertools.chain对象为数组的方法
Feb 07 Python
Python常用外部指令执行代码实例
Nov 05 Python
Python实现钉钉/企业微信自动打卡的示例代码
Feb 02 Python
Python绘制散点图之可视化神器pyecharts
Jul 07 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和ACCESS写聊天室(六)
2006/10/09 PHP
PHP 日期时间函数的高级应用技巧
2009/10/10 PHP
PHP中将数组转成XML格式的实现代码
2011/08/08 PHP
PHP flock 文件锁详细介绍
2012/12/29 PHP
常用Extjs工具:Extjs.util.Format使用方法
2012/03/22 Javascript
JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)
2012/04/07 Javascript
js禁止页面复制功能禁用页面右键菜单示例代码
2013/08/29 Javascript
ajax请求乱码的解决方法(中文乱码)
2014/04/10 Javascript
Jquery对select的增、删、改、查操作
2015/02/06 Javascript
浅谈Angular的$q, defer, promise
2016/12/20 Javascript
js时间戳和c#时间戳互转方法(推荐)
2017/02/15 Javascript
微信小程序与php 实现微信支付的简单实例
2017/06/23 Javascript
微信小程序实现topBar底部选择栏效果
2018/07/20 Javascript
从零开始用electron手撸一个截屏工具的示例代码
2018/10/10 Javascript
微信小程序页面间值传递的两种方法
2018/11/26 Javascript
什么时候不能在 Node.js 中使用 Lock Files
2019/06/24 Javascript
javaScript实现一个队列的方法
2020/07/14 Javascript
js实现数字跳动到指定数字
2020/08/25 Javascript
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
2017/02/14 Python
以工厂直接定价的传奇性能:Ben Hogan Golf
2019/01/04 全球购物
同步和异步有何异同,在什么情况下分别使用他们?
2012/12/28 面试题
物流仓管员岗位职责
2013/12/04 职场文书
高一家长会邀请函
2014/01/12 职场文书
伊索寓言教学反思
2014/05/01 职场文书
农村文化活动总结
2014/08/28 职场文书
开发房地产协议书
2014/09/14 职场文书
处级领导班子全部召开专题民主生活会情况汇报
2014/09/27 职场文书
2014年医院后勤工作总结
2014/12/06 职场文书
2014年乡镇团委工作总结
2014/12/18 职场文书
高三复习计划
2015/01/19 职场文书
个人向公司借款协议书
2016/03/19 职场文书
2019年中学生的思想品德评语集锦
2019/12/19 职场文书
python中数组和列表的简单实例
2022/03/25 Python
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技
Python绘制散乱的点构成的图的方法
2022/04/21 Python
讲解MySQL增删改操作
2022/05/06 MySQL