使用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输出一个杨辉三角的例子
Jun 13 Python
python实现合并两个数组的方法
May 16 Python
AI人工智能 Python实现人机对话
Nov 13 Python
使用Flask集成bootstrap的方法
Jul 24 Python
Python3.5面向对象与继承图文实例详解
Apr 24 Python
python爬虫 爬取超清壁纸代码实例
Aug 16 Python
用Python画一个LinkinPark的logo代码实例
Sep 10 Python
Python中xml和dict格式转换的示例代码
Nov 07 Python
详解python3 GUI刷屏器(附源码)
Feb 18 Python
Python数据清洗工具之Numpy的基本操作
Apr 22 Python
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
Apr 24 Python
分享几种python 变量合并方法
Mar 20 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原理之异常机制深入分析
2010/08/08 PHP
PHPMYADMIN导入数据最大为2M的解决方法
2012/04/23 PHP
PHP管理内存函数 memory_get_usage()使用介绍
2012/09/23 PHP
php实现的发送带附件邮件类实例
2014/09/22 PHP
跟我一起学写jQuery插件开发方法(附完整实例及下载)
2010/04/01 Javascript
一个简单的JavaScript数据缓存系统实现代码
2010/10/24 Javascript
JS 实现点击a标签的时候让其背景更换
2013/10/15 Javascript
原生JS绑定滑轮滚动事件兼容常见浏览器
2014/06/30 Javascript
extjs 分页使用jsp传递数据示例
2014/07/29 Javascript
js使用post 方式打开新窗口
2015/02/26 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
2015/03/06 Javascript
浅谈js构造函数的方法与原型prototype
2016/07/04 Javascript
jquery实现二级导航下拉菜单效果实例
2019/05/14 jQuery
iview实现图片上传功能
2020/06/29 Javascript
vue-router 控制路由权限的实现
2020/09/24 Javascript
[01:22:19]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
[51:17]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第二场 10月30日
2020/10/31 DOTA
Python实现二叉搜索树
2016/02/03 Python
Python实现的redis分布式锁功能示例
2018/05/29 Python
python调用百度地图WEB服务API获取地点对应坐标值
2019/01/16 Python
深入理解Django-Signals信号量
2019/02/19 Python
详解用python写网络爬虫-爬取新浪微博评论
2019/05/10 Python
python路径的写法及目录的获取方式
2019/12/26 Python
Python reversed函数及使用方法解析
2020/03/17 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
2020/04/24 Python
Python 转移文件至云对象存储的方法
2021/02/07 Python
路易威登和香奈儿手袋:LuxeDH
2017/01/12 全球购物
Miller Harris官网:英国小众香水品牌
2020/09/24 全球购物
写好求职信第一句话的技巧
2013/10/26 职场文书
演讲稿祖国在我心中
2014/05/04 职场文书
经典禁毒标语
2014/06/16 职场文书
个人债务授权委托书
2014/10/17 职场文书
清明节寄语2015
2015/03/23 职场文书
演讲稿:态度决定一切
2019/04/02 职场文书
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
2021/04/04 Servers
SpringBoot使用ip2region获取地理位置信息的方法
2022/06/21 Java/Android