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代码
Mar 13 Python
跟老齐学Python之画圈还不简单吗?
Sep 20 Python
Python中暂存上传图片的方法
Feb 18 Python
python实现基于SVM手写数字识别功能
May 27 Python
python实现图书管理系统
Mar 12 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
Apr 17 Python
python pcm音频添加头转成Wav格式文件的方法
Jan 09 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
Apr 29 Python
如何基于pythonnet调用halcon脚本
Jan 20 Python
python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法
Feb 27 Python
Python使用正则表达式实现爬虫数据抽取
Aug 17 Python
分析Python感知线程状态的解决方案之Event与信号量
Jun 16 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中长文章分页显示实现代码
2012/09/29 PHP
PHP API接口必备之输出json格式数据示例代码
2017/06/27 PHP
PHP如何实现订单的延时处理详解
2017/12/30 PHP
JS高级拖动技术 setCapture,releaseCapture
2011/07/31 Javascript
jQuery实现仿百度首页滑动伸缩展开的添加服务效果代码
2015/09/09 Javascript
vue,angular,avalon这三种MVVM框架优缺点
2016/04/27 Javascript
原生js获取元素样式的简单方法
2016/08/06 Javascript
Bootstrap Table使用心得总结
2016/11/29 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
jQuery实现的简单排序功能示例【冒泡排序】
2017/01/13 Javascript
js自定义Tab选项卡效果
2017/06/05 Javascript
js实现水平滚动菜单导航
2017/07/21 Javascript
jQuery实现简单的回到顶部totop功能示例
2017/10/16 jQuery
详解Vue源码学习之callHook钩子函数
2018/07/25 Javascript
利用Node.js批量抓取高清妹子图片实例教程
2018/08/02 Javascript
详解使用WebPack搭建React开发环境
2019/08/06 Javascript
vue中改变滚动条样式的方法
2020/03/03 Javascript
tornado框架blog模块分析与使用
2013/11/21 Python
Python编程之微信推送模板消息功能示例
2017/08/21 Python
python简单实例训练(21~30)
2017/11/15 Python
Django项目创建到启动详解(最全最详细)
2019/09/07 Python
离线状态下在jupyter notebook中使用plotly实例
2020/04/24 Python
PHP基于phpqrcode类库生成二维码过程解析
2020/05/28 Python
从python读取sql的实例方法
2020/07/21 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
Opencv python 图片生成视频的方法示例
2020/11/18 Python
python之随机数函数的实现示例
2020/12/30 Python
韩国三星集团旗下时尚品牌官网:SSF SHOP
2016/08/02 全球购物
教师校本培训方案
2014/02/26 职场文书
环保公益广告语
2014/03/13 职场文书
珠宝店促销方案
2014/03/21 职场文书
学习雷锋做美德少年寄语大全
2014/04/09 职场文书
考试作弊检讨书1000字(5篇)
2014/10/19 职场文书
讲座新闻稿
2015/07/18 职场文书
新人入职感言
2015/07/31 职场文书
Nginx+Tomcat负载均衡集群的实现示例
2021/10/24 Servers