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 读写txt文件 json文件的实现方法
Oct 22 Python
python 计算文件的md5值实例
Jan 13 Python
python 3.0 模拟用户登录功能并实现三次错误锁定
Nov 01 Python
Python Datetime模块和Calendar模块用法实例分析
Apr 15 Python
Python Django的安装配置教程图文详解
Jul 17 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
Aug 02 Python
Pycharm使用远程linux服务器conda/python环境在本地运行的方法(图解))
Dec 09 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
Jan 18 Python
python实现简单俄罗斯方块
Mar 13 Python
如何基于Python按行合并两个txt
Nov 03 Python
python爬取豆瓣电影TOP250数据
May 23 Python
Python制作一个随机抽奖小工具的实现
Jul 07 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
第十二节--类的自动加载
2006/11/16 PHP
ADODB结合SMARTY使用~超级强
2006/11/25 PHP
PHP JSON格式数据交互实例代码详解
2011/01/13 PHP
PHP通过iconv将字符串从GBK转换为UTF8字符集
2011/07/18 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
PHP面向对象之领域模型+数据映射器实例(分析)
2017/06/21 PHP
jQuery实现当按下回车键时绑定点击事件
2014/01/28 Javascript
jquery通过select列表选择框对表格数据进行过滤示例
2014/05/07 Javascript
JS实现的表格行鼠标点击高亮效果代码
2015/11/27 Javascript
JavaScript字符串删除重复字符的方法
2015/12/25 Javascript
javascript实现下拉提示选择框
2015/12/29 Javascript
JavaScript作用域示例详解
2016/07/07 Javascript
js实现的在线调色板功能完整实例
2016/12/21 Javascript
微信小程序 css使用技巧总结
2017/01/09 Javascript
Vue2.0父组件与子组件之间的事件发射与接收实例代码
2017/09/19 Javascript
React如何避免重渲染
2018/04/10 Javascript
jQuery动态操作表单示例【基于table表格】
2018/12/06 jQuery
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
2020/06/06 jQuery
Python实现的维尼吉亚密码算法示例
2018/04/12 Python
python使用matplotlib画饼状图
2018/09/25 Python
Python实现二维曲线拟合的方法
2018/12/29 Python
python可以用哪些数据库
2020/06/22 Python
英国第一蛋白粉品牌:Myprotein
2016/09/14 全球购物
Redbubble法国:由独立艺术家设计的独特产品
2019/01/08 全球购物
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
How to spawning asynchronous work in J2EE
2016/08/29 面试题
Servlet的生命周期
2013/08/25 面试题
服务中心夜班服务员岗位职责
2013/11/27 职场文书
一年级数学教学反思
2014/02/01 职场文书
应届毕业生如何写求职信
2014/02/16 职场文书
生物制药专业自我鉴定
2014/02/19 职场文书
水毁工程实施方案
2014/04/01 职场文书
golang http使用踩过的坑与填坑指南
2021/04/27 Golang
简单总结SpringMVC拦截器的使用方法
2021/06/28 Java/Android
死磕 java同步系列之synchronized解析
2021/06/28 Java/Android
Echarts如何重新渲染实例详解
2022/05/30 Javascript