Python openpyxl模块原理及用法解析


Posted in Python onJanuary 19, 2020

这篇文章主要介绍了Python openpyxl模块原理及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

此模块不是Python内置的模块需要安装,安装方法如下

pip install openpyxl

注意:

此模块只支持offce 2010,即是电子表格后缀是*.xlsx

1、openpyxl模块常用函数

import openpyxl

wb = openpyxl.load_workbook('example.xlsx')

##### 工作表常用操作
print(wb.active) # 获取电子表格Worksheet是否有数据
print(wb.read_only) # 是否是以只读方式打开
print(wb.encoding) # 获取电子表格的编码
print('', wb.properties) # 获取电子表格属性如:标题、作者、创建时间等
print(wb.worksheets) # 获取工作表名
print(wb.get_sheet_names()) # 获取工作表的所有名字
print(wb.sheetnames) # 获取工作表的所有名字跟wb.get_sheet_names()一样的功能
print(wb.get_sheet_by_name('Sheet1')) # 通过工作表的名字,获取Worksheet对象操作电子表格
print(wb.create_sheet('python创建的工作表')) # 创建的工作表,记得用save保存,才保存到硬盘上
print(wb.copy_worksheet(wb['Sheet1'])) # 复制工作表

#### 工作表的常用操作
sheet1_obj = wb['Sheet1']
print(sheet1_obj.title) # 工作表的标题
print(sheet1_obj.dimensions) # 获取表格大小,返回格式如:A1:D6
print(sheet1_obj.max_row) # 表格最大行数
print(sheet1_obj.min_row) # 表格最小行数
print(sheet1_obj.max_column) # 表格最大列数
print(sheet1_obj.min_column) # 表格最小列数
print(sheet1_obj.rows) # 按行获取单元格(Cell对象)
print(sheet1_obj.columns) # 按列获取单元格(Cell对象)
print(sheet1_obj.freeze_panes) # 冻结窗格
print(sheet1_obj.values) # 按行获取表格的内容(数据)
print(sheet1_obj.iter_rows())#迭代器方式,按行获取所有单元格(Cell对象)
print(sheet1_obj.iter_columns())#迭代器方式,按列获取所有单元格(Cell对象)
sheet1_obj.append(['1列','2列','3列','4列']) #往工作表最后一行插入多列数据

#### 单元格的常用操作
sheet1_obj.merged_cells #合并单元格
sheet1_obj.unmerge_cells #取消合并单元格
print(sheet1_obj['A2'].row) # 获取行数
print(sheet1_obj['A2'].column) # 获取列数
print(sheet1_obj['B1'].value) #获取单元格的值
wb.save('example.xlsx') #保存单元格

2、利用openpyxl模块创建一张电子表格

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from openpyxl import Workbook

wb = Workbook()
# print(wb.get_sheet_names()) # 获取工作表的名字

ws = wb.get_sheet_by_name('Sheet') # 获取Sheet工作表对象
# print(ws.title) # 获取工作表的标题

ws.title = 'Student' # 设置新的工作表

# 设置内容
ws['A1'] = 'Hello World'

import datetime

ws['A2'] = datetime.datetime.now()

wb.save('new_sample.xlsx')

运行效果

Python openpyxl模块原理及用法解析

3、利用openpyxl模块对电子表格运算操作(求和数、平均数)

表格例子如下:

Python openpyxl模块原理及用法解析

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import openpyxl
from openpyxl.styles import Alignment

def process_worksheet(sheet):
  avg_column = sheet.max_column + 1 # 平均数,存放在最后一列
  sum_column = sheet.max_column + 2 # 求和,存放在最后第二列

  for row in sheet.iter_rows(min_row=2, min_col=2):
    scores = [cell.value for cell in row] # 获取一行的值
    sum_score = sum(scores) # 求一行的和
    avg_score = sum_score / len(scores) # 求一行的平均数
    avg_cell = sheet.cell(row=row[0].row, column=avg_column)
    sum_cell = sheet.cell(row=row[0].row, column=sum_column)
    avg_cell.value = avg_score # 定位到单元格,设置总分
    sum_cell.value = sum_score # 定位到单元格,设置平均分

    # 设置对齐方式,水平是右对齐,垂直是居中
    align = Alignment(horizontal='left', vertical='center', wrap_text=True)
    avg_cell.alignment = align
    sum_cell.alignment = align

  # 设置平均分和总分的标题
  sheet.cell(row=1, column=avg_column).value = '平均分'
  sheet.cell(row=1, column=sum_column).value = '总分'

def main():
  wb = openpyxl.load_workbook('example.xlsx')
  sheet = wb.get_sheet_by_name('Sheet1')
  process_worksheet(sheet)
  wb.save('example.xlsx')

if __name__ == '__main__':
  main()

运行效果

Python openpyxl模块原理及用法解析

4、多张电子表格合并为一张电子表格

准备3张电子表格

员工1.xlsx

Python openpyxl模块原理及用法解析

员工2.xlsx

Python openpyxl模块原理及用法解析

员工3.xlsx

Python openpyxl模块原理及用法解析

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import openpyxl
import glob
import os

def merge_xlsx_files(xlsx_files):
  wb = openpyxl.load_workbook(xlsx_files[0]) # 打开第一张电子表格
  ws = wb.active # 激活 worksheet
  ws.title = 'merged result' # 合并结果

  for filename in xlsx_files[1:]:
    workbook = openpyxl.load_workbook(filename)
    sheet = workbook.active # 激活 worksheet
    for row in sheet.iter_rows(min_row=2): # 从第二行开启迭代
      values = [cell.value for cell in row] # 返回一列的值,以列表类型
      ws.append(values) # 把列表增加到新的表格里面
  return wb

def get_all_xlsx_files(path):
  """指定后缀名,获取所有跟后缀相关的文件类型,返回列表"""
  xlsx_files = glob.glob(os.path.join(path, '*.xlsx'))
  sorted(xlsx_files, key=str.lower) # 排序
  return xlsx_files

def main():
  path = os.path.join(os.path.dirname(os.getcwd()), '临时测试', 'excels') # 目录自行配置
  xlsx_files = get_all_xlsx_files(path)
  wb = merge_xlsx_files(xlsx_files)
  wb.save('merge_data.xlsx') # 保存数据到硬盘

if __name__ == '__main__':
  main()

运行效果(硬盘多出一张电子表格 merge_data.xlsx)

Python openpyxl模块原理及用法解析

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python写的一个文本编辑器
Jan 23 Python
深入浅析Python中join 和 split详解(推荐)
Jun 30 Python
Python 模块EasyGui详细介绍
Feb 19 Python
详解python3中socket套接字的编码问题解决
Jul 01 Python
浅析PHP与Python进行数据交互
May 15 Python
在python中bool函数的取值方法
Nov 01 Python
Python使用Slider组件实现调整曲线参数功能示例
Sep 06 Python
python模块hashlib(加密服务)知识点讲解
Nov 25 Python
Pytorch Tensor的统计属性实例讲解
Dec 30 Python
Python发送手机动态验证码代码实例
Feb 28 Python
PyTorch中的C++扩展实现
Apr 02 Python
Python通过format函数格式化显示值
Oct 17 Python
Python imutils 填充图片周边为黑色的实现
Jan 19 #Python
python opencv 实现对图像边缘扩充
Jan 19 #Python
python给图像加上mask,并提取mask区域实例
Jan 19 #Python
python实现在一个画布上画多个子图
Jan 19 #Python
python构造函数init实例方法解析
Jan 19 #Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
Jan 19 #Python
python matplotlib中的subplot函数使用详解
Jan 19 #Python
You might like
PHP简洁函数(PHP简单明了函数语法)
2012/06/10 PHP
探讨:如何使用PhpDocumentor生成文档
2013/06/25 PHP
smarty中英文多编码字符截取乱码问题解决方法
2014/10/28 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
2016/10/12 PHP
JavaScript语句可以不以;结尾的烦恼
2007/03/08 Javascript
七个很有意思的PHP函数
2014/05/12 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
2015/01/09 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
jquery滚动特效集锦
2015/06/03 Javascript
为什么JavaScript没有块级作用域
2016/05/22 Javascript
angular之ng-template模板加载
2017/11/09 Javascript
node+koa2+mysql+bootstrap搭建一个前端论坛
2018/05/06 Javascript
使用vue-infinite-scroll实现无限滚动效果
2018/06/22 Javascript
玩转Koa之核心原理分析
2018/12/29 Javascript
react的滑动图片验证码组件的示例代码
2019/02/27 Javascript
Vue项目路由刷新的实现代码
2019/04/17 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
Nodejs文件上传、监听上传进度的代码
2020/03/27 NodeJs
[02:25]DOTA2英雄基础教程 熊战士
2014/01/03 DOTA
[01:00:35]2018DOTA2亚洲邀请赛3月30日B组 EffcetVSMineski
2018/03/31 DOTA
python模块简介之有序字典(OrderedDict)
2016/12/01 Python
Python使用修饰器执行函数的参数检查功能示例
2017/09/26 Python
Django原生sql也能使用Paginator分页的示例代码
2017/11/15 Python
Python基础之条件控制操作示例【if语句】
2019/03/23 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
2019/03/27 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
2019/07/31 Python
python类的实例化问题解决
2019/08/31 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
2020/06/02 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
美国在线乐器和设备商店:Musician’s Friend
2018/07/06 全球购物
荷兰在线钓鱼商店:Raven
2019/06/26 全球购物
优秀员工演讲稿
2014/05/19 职场文书
教师国庆节演讲稿范文2014
2014/09/21 职场文书
运动会广播稿50字-100字
2014/10/11 职场文书
实习报告怎么写
2019/06/20 职场文书
浅析Python OpenCV三种滤镜效果
2022/04/11 Python