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 urllib模块urlopen()与urlretrieve()详解
Nov 01 Python
获取Django项目的全部url方法详解
Oct 26 Python
numpy中矩阵合并的实例
Jun 15 Python
Python读取数据集并消除数据中的空行方法
Jul 12 Python
pandas 层次化索引的实现方法
Jul 06 Python
python manage.py runserver流程解析
Nov 08 Python
selenium WebDriverWait类等待机制的实现
Mar 18 Python
Python3爬虫中Ajax的用法
Jul 10 Python
Python利用命名空间解析XML文档
Aug 10 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
Nov 02 Python
pymysql模块使用简介与示例
Nov 17 Python
如何用六步教会你使用python爬虫爬取数据
Apr 06 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
mac下安装nginx和php
2013/11/04 PHP
php统计时间和内存使用情况示例分享
2014/03/13 PHP
基于jQuery的js分页代码
2010/06/10 Javascript
一个报数游戏js版(约瑟夫环问题)
2010/08/05 Javascript
javascript中setAttribute()函数使用方法及兼容性
2015/07/19 Javascript
通过JS和PHP两种方法判断用户请求时使用的浏览器类型
2016/09/01 Javascript
详解jQuery中的事件
2016/12/14 Javascript
bootstrap多种样式进度条展示
2016/12/20 Javascript
bootstrap表单示例代码分享
2017/05/18 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
jQuery实现网页拼图游戏
2020/04/22 jQuery
JavaScript页面倒计时功能完整示例
2019/05/15 Javascript
vue项目实现设置根据路由高亮对应的菜单项操作
2020/08/06 Javascript
JavaScript检测是否开启了控制台(F12调试工具)
2020/10/02 Javascript
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
[03:27]最受玩家喜爱奖提名:PZH_Element 致玩家寄语
2016/12/20 DOTA
Python实现简单过滤文本段的方法
2017/05/24 Python
Python2.7编程中SQLite3基本操作方法示例
2017/08/09 Python
python的Crypto模块实现AES加密实例代码
2018/01/22 Python
将Dataframe数据转化为ndarry数据的方法
2018/06/28 Python
使用pyqt5 tablewidget 单元格设置正则表达式
2019/12/13 Python
Python 爬取必应壁纸的实例讲解
2020/02/24 Python
Pytorch数据拼接与拆分操作实现图解
2020/04/30 Python
Python xpath表达式如何实现数据处理
2020/06/13 Python
Python如何定义有默认参数的函数
2020/08/10 Python
css3新增颜色表示方式分享
2014/04/15 HTML / CSS
CSS3实现菜单悬停效果
2020/11/17 HTML / CSS
美国诺德斯特龙百货官网:Nordstrom
2016/08/23 全球购物
世界领先的在线地板和建筑材料批发商:BuildDirect
2017/02/26 全球购物
Opodo英国旅游网站:预订廉价航班、酒店和汽车租赁
2018/07/14 全球购物
局部内部类是否可以访问非final变量?
2013/04/20 面试题
英文简历中的自我评价用语
2013/12/09 职场文书
培训楼经理岗位责任制
2014/02/10 职场文书
优秀辅导员事迹材料
2014/02/16 职场文书
护理自荐信
2019/05/14 职场文书
世界上超棒的8种逻辑思维
2019/08/06 职场文书