侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Python openpyxl模块原理及用法解析

Python  /  管理员 发布于 7年前   421

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

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

pip install openpyxl

注意:

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

1、openpyxl模块常用函数

import openpyxlwb = 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:D6print(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 Workbookwb = 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 datetimews['A2'] = datetime.datetime.now()wb.save('new_sample.xlsx')

运行效果

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

表格例子如下:

#!/usr/bin/env python# -*- coding: utf-8 -*-import openpyxlfrom openpyxl.styles import Alignmentdef 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()

运行效果

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

准备3张电子表格

员工1.xlsx

员工2.xlsx

员工3.xlsx

#!/usr/bin/env python# -*- coding: utf-8 -*-import openpyxlimport globimport osdef 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 wbdef get_all_xlsx_files(path):  """指定后缀名,获取所有跟后缀相关的文件类型,返回列表"""  xlsx_files = glob.glob(os.path.join(path, '*.xlsx'))  sorted(xlsx_files, key=str.lower) # 排序  return xlsx_filesdef 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 处理3万多条数据只要几秒钟
    下一条:
    Python imutils 填充图片周边为黑色的实现
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客