使用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文件夹与文件的操作实现代码
Jul 13 Python
Python开发常用的一些开源Package分享
Feb 14 Python
Django框架下在URLconf中指定视图缓存的方法
Jul 23 Python
Python学习教程之常用的内置函数大全
Jul 14 Python
flask中主动抛出异常及统一异常处理代码示例
Jan 18 Python
Python爬虫包BeautifulSoup简介与安装(一)
Jun 17 Python
python TKinter获取文本框内容的方法
Oct 11 Python
Python2和Python3.6环境解决共存问题
Nov 09 Python
使用python绘制二元函数图像的实例
Feb 12 Python
Python学习笔记之变量、自定义函数用法示例
May 28 Python
Python实现Restful API的例子
Aug 31 Python
python 下载文件的几种方法汇总
Jan 06 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侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
2009/10/15 PHP
PHP的基本常识小结
2013/07/05 PHP
CI框架安全类Security.php源码分析
2014/11/04 PHP
PHP和MYSQL实现分页导航思路详解
2017/04/11 PHP
Mac下关于PHP环境和扩展的安装详解
2019/10/17 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
js模拟实现Array的sort方法
2007/12/11 Javascript
让ie6也支持websocket采用flash封装实现
2013/02/18 Javascript
浅谈javascript 函数属性和方法
2015/01/21 Javascript
Javascript中arguments用法实例分析
2015/06/13 Javascript
JS排序方法(sort,bubble,select,insert)代码汇总
2016/01/30 Javascript
js改变css样式的三种方法推荐
2016/06/28 Javascript
使用nodejs爬取前程无忧前端技能排行
2017/05/06 NodeJs
vue绑定class与行间样式style详解
2017/08/16 Javascript
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
vue.js提交按钮时进行简单的if判断表达式详解
2018/08/08 Javascript
Js 利用正则表达式和replace函数获取string中所有被匹配到的文本(推荐)
2018/10/28 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
2019/09/20 Javascript
基于vue实现图片验证码倒计时60s功能
2019/12/10 Javascript
vue element table中自定义一些input的验证操作
2020/07/18 Javascript
[03:05]DOTA2英雄基础教程 嗜血狂魔
2013/12/10 DOTA
python中 ? : 三元表达式的使用介绍
2013/10/09 Python
Python黑帽编程 3.4 跨越VLAN详解
2016/09/28 Python
Python+Selenium自动化实现分页(pagination)处理
2017/03/31 Python
判断python字典中key是否存在的两种方法
2018/08/10 Python
Python在cmd上打印彩色文字实现过程详解
2019/08/07 Python
使用Python对Dicom文件进行读取与写入的实现
2020/04/20 Python
python opencv实现直线检测并测出倾斜角度(附源码+注释)
2020/12/31 Python
HTML5适合的情人节礼物有纪念日期功能
2021/01/25 HTML / CSS
英文自我鉴定
2013/12/10 职场文书
白酒市场开发计划书
2014/01/09 职场文书
党校个人自我鉴定范文
2014/03/28 职场文书
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
教师查摆问题及整改措施
2014/10/11 职场文书
优秀员工推荐材料
2014/12/20 职场文书
《西门豹》教学反思
2016/02/23 职场文书