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中的XML 工具
Apr 13 Python
Python中列表和元组的使用方法和区别详解
Dec 30 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
Aug 08 Python
Django 如何获取前端发送的头文件详解(推荐)
Aug 15 Python
python+opencv实现动态物体识别
Jan 09 Python
tornado 多进程模式解析
Jan 15 Python
Python模拟登录的多种方法(四种)
Jun 01 Python
修改 CentOS 6.x 上默认Python的方法
Sep 06 Python
Pycharm debug调试时带参数过程解析
Feb 03 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
Feb 27 Python
Python识别处理照片中的条形码
Nov 16 Python
python链表类中获取元素实例方法
Feb 23 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数组中的重复值的实现代码
2011/07/17 PHP
php面向对象 字段的声明与使用
2012/06/14 PHP
php中eval函数的危害与正确禁用方法
2014/06/30 PHP
PHP连接MSSQL2008/2005数据库(SQLSRV)配置实例
2014/10/22 PHP
JQuery获取浏览器窗口内容部分高度的代码
2012/02/24 Javascript
JS函数实现动态添加CSS样式表文件
2012/12/15 Javascript
JavaScript中反正弦函数Math.asin()的使用简介
2015/06/14 Javascript
js实现文字在按钮上滚动的方法
2015/08/20 Javascript
jquery判断复选框是否选中进行答题提示特效
2015/12/10 Javascript
AngularJS 路由详解和简单实例
2016/07/28 Javascript
js带闹铃功能的倒计时代码
2016/09/29 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
2016/12/24 Javascript
原生JS实现在线问卷调查投票特效
2017/01/03 Javascript
一个可复用的vue分页组件
2017/05/15 Javascript
for循环 + setTimeout 结合一些示例(前端面试题)
2017/08/30 Javascript
Angular实现类似博客评论的递归显示及获取回复评论的数据
2017/11/06 Javascript
JS实现的小火箭发射动画效果示例
2018/12/08 Javascript
JS开发自己的类库实例分析
2019/08/28 Javascript
JS实现的进制转换,浮点数相加,数字判断操作示例
2019/11/09 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
2020/03/25 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
uni-app实现获取验证码倒计时功能
2020/11/01 Javascript
[02:49]DOTA2完美大师赛首日观众采访
2017/11/23 DOTA
多版本Python共存的配置方法
2017/05/22 Python
Python wxPython库消息对话框MessageDialog用法示例
2018/09/03 Python
python实现图书借阅系统
2019/02/20 Python
浅谈Python type的使用
2019/11/19 Python
对Python中 \r, \n, \r\n的彻底理解
2020/03/06 Python
python3中布局背景颜色代码分析
2020/12/01 Python
LightInTheBox西班牙站点:全球商品在线采购
2016/09/22 全球购物
世界上最大的二手相机店:KEN
2017/05/17 全球购物
为什么要有struct关键字
2012/05/08 面试题
.TTL是什么?有什么用处,通常那些工具会用到它?(ping? traceroute? ifconfig? netstat?)
2016/05/09 面试题
体育运动会广播稿
2014/10/05 职场文书
2015年八一建军节活动总结
2015/03/20 职场文书
Python+Tkinter打造签名设计工具
2022/04/01 Python