用python的openpyxl库实现对excel工作表的自动化操作

用python的openpyxl库读取excel工作表,批量建立工作表,批量修改工作表标题,批量设置单元格样式,批量调整打印设置。


文章目录

  • 用python的openpyxl库实现对excel工作表的自动化操作
  • 一、提出问题
  • 二、分析问题
    • 1.公交线路站点信息表
    • 2.调查线路站点信息表
  • 三、解决问题
    • 1.openpyxl库
    • 2.程序的编写思路
    • 3.运行结果
  • 四、完整代码
  • 总结

一、提出问题

因工作需要需制订公交线路站台的调查方案,现有公交线路站点的具体信息。目标需求是制作一个excel工作簿,工作簿约包含120个工作表,每个工作表包含要调查公交线路站点信息情况,同时,每个工作表以该线路的名称来命名以方便查询。如下图所示。

该工作簿约包含120个工作表,如果重复性地进行新建、复制、粘贴、查找、复制、粘贴,太无聊,太浪费时间了,如何才能快速方便的完成这项工作,解决机械性的重复操作问题,提高工作效率呢?

二、分析问题

1.公交线路站点信息表

提供的公交线路站点信息如下表所示。

表 datachengdu_station.xlsx

提供的线路站点信息表如图所示,从中可以看出,表头主要包含线路名称、经度、纬度、站点名称和站序5个字段,线路包含上行和下行两个方向,站序升序排列。

2.调查线路站点信息表

分析调查线路信息表可知,每张调查表都具有相同的头部和尾部结构,只是中间部分不同,需要把具体需要调查的线路站点信息写入中间部分,同时,对工作表的标题进行修改。

三、解决问题

1.openpyxl库

好在前段时间看了《Python编程快速上手 让繁琐工作自动化》一书,里面讲到了如何用python处理excel表格。本文主要用到openpyxl,一个用于读取和写入Excel 2010 xlsx/xlsm文件的python第三方库。Python本身是不能对excel进行读写的,但是借助于openpyxl就可以非常方便地对excel进行自动化操作。

2.程序的编写思路

程序的思路和代码顺序并没有直接关联,以下主要说明程序的思路。
首先,读取调查方案excel表中的线路名称,调查方案表如下图所示,并保存为一个列表;
其次,新建表格,修改表格标题,写入表头信息;对于调查方案中的每个线路名称,遍历线路站点表,找到对应线路的站点名称和站序,由于线路站点信息表是分上行和下行的,调查方案表格中只需要上行即可,分析线路站点表可知,站序是递增的,但当线路由上下变为下行时,站序会重新从1开始,这时加入一个判断,当站序不再递增时,停止写入,如此重复遍历判断,对新表逐一添加一行,写入一行,直至站点遍历结束;判断新表的最大行长度,在新表末尾写入表尾的内容、合并单元格、添加公式、设置填充颜色、调整行高列宽、设置字号加粗、设置边框、调整对齐方式、设置纸张大小横向打印、设置水平居中打印,重复打印标题,直至调查方案中的每条线路遍历结束。
最后,保存工作簿。

表 需调查线路汇总新方案.xlsx

3.运行结果

运行程序后,得到如下结果。
表 sample.xlsx

四、完整代码

from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
from openpyxl.styles import PatternFill, Border, Side, Font, Alignment# 新建工作表
wb1 = Workbook()# 加载工作表
wb2 = load_workbook(r'C:\Users\Desktop\pythonProject\需调查线路汇总新方案.xlsx')
wb3 = load_workbook(r'C:\Users\Desktop\pythonProject\datachengdu_station.xlsx')
# 获取活动单元表
wb2s = wb2.active
title = []
a0 = wb2s.max_row
for i in range(2, a0 + 1):t0 = wb2s.cell(row=i, column=1).valuet1 = str(t0)title.append(t1)wb3s = wb3.active
a = wb3s.max_row# 批量创建工作表,并写入模板表格中的数据
for i in title:# 创建表格ws = wb1.create_sheet(i)# 添加表头ws.append(['序号', '站台名', '类型', '站牌问题', '', '', '', '', '', '', '站台问题'])ws.append(['', '', '', '破损', '有污渍', '有牛皮廯', '信息不清晰', '信息缺失', '无警示标志', '无投诉电话', '乘车秩序混乱', '地面有垃圾', '共享单车乱停放'])# 合并单元格ws.merge_cells('A1:A2')ws.merge_cells('B1:B2')ws.merge_cells('C1:C2')ws.merge_cells('D1:J1')ws.merge_cells('k1:M1')# 调整标头样式# 写入线路站点信息m = 1for j in range(1, a + 1):b = wb3s.cell(j, 1).valueif b == i:d = wb3s.cell(j, 6).valuec1 = wb3s.cell(j, 7).valuec2 = wb3s.cell(j + 1, 7).value# print(c1, d)ws.insert_rows(j + 3)  # 插入一行ws.cell(m + 2, 1).value = c1ws.cell(m + 2, 2).value = dm = m + 1if int(c2) != int(c1) + 1:break# 计算现表长度b = ws.max_row# print(b)# 添加表底ws.append(['标准分值', '', '', 20, 10, 10, 10, 20, 10, 5, 10, 5, '不计入得分'])ws.append(['问题笔数'])ws.append(['分项得分'])ws.append(['折算得分(百分制)'])ws.append(['合计得分'])# 合并单元格# ws.merge_cells('A1:A2')ws.merge_cells(start_row=b + 1, start_column=1, end_row=b + 1, end_column=3)ws.merge_cells(start_row=b + 2, start_column=1, end_row=b + 2, end_column=3)ws.merge_cells(start_row=b + 3, start_column=1, end_row=b + 3, end_column=3)ws.merge_cells(start_row=b + 4, start_column=1, end_row=b + 4, end_column=3)ws.merge_cells(start_row=b + 5, start_column=1, end_row=b + 5, end_column=3)# 添加公式for n in range(4, 13):le = get_column_letter(n)formula1 = "=SUM(" + le + "3:" + le + str(b) + ")"formula2 = "=" + le + str(b + 1) + "*(1-" + le + str(b + 2) + "/$A" + str(b) + ")"# print(formula2)ws.cell(b + 2, n, formula1)ws.cell(b + 3, n, formula2)le = get_column_letter(n)formula3 = "=D" + str(b + 3) + "/D" + str(b + 1) + "*100"formula4 = "=SUM(E" + str(b + 3) + ":G" + str(b + 3) + ")/SUM(E" + str(b + 1) + ":G" + str(b + 1) + ")" + "*100"formula5 = "=SUM(H" + str(b + 3) + ":I" + str(b + 3) + ")/SUM(H" + str(b + 1) + ":I" + str(b + 1) + ")" + "*100"formula6 = "=SUM(D" + str(b + 4) + "*0.02+E" + str(b + 4) + "*0.03+H" + str(b + 4) + "*0.03)/0.08"ws.cell(b + 4, 4, formula3)ws.cell(b + 4, 5, formula4)ws.cell(b + 4, 8, formula5)ws.cell(b + 5, 4, formula6)# 合并单元格ws.merge_cells('E' + str(b + 4) + ':G' + str(b + 4))ws.merge_cells('H' + str(b + 4) + ':I' + str(b + 4))ws.merge_cells('D' + str(b + 5) + ':M' + str(b + 5))# 设置单元格样式# 设置填充颜色orange_fill = PatternFill(fill_type='solid', fgColor="ffc000")green_fill = PatternFill(fill_type='solid', fgColor="92d050")blue_fill = PatternFill(fill_type='solid', fgColor="00b0f0")yellow_fill = PatternFill(fill_type='solid', fgColor="ffff00")for o in range(4, 13):ws.cell(row=b + 3, column=o).fill = orange_fillws.cell(row=b + 4, column=4).fill = orange_fillws.cell(row=b + 4, column=5).fill = green_fillws.cell(row=b + 4, column=8).fill = blue_fillws.cell(row=b + 5, column=1).fill = yellow_fillws.cell(row=b + 5, column=4).fill = yellow_fill# 设置字号,加粗等font = Font(size=11, bold=True)for y in range(1, 14):for x in range(1, 3):ws.cell(x, y).font = fontfor z in range(b + 1, b + 6):ws.cell(z, y).font = font# 设置边框thin = Side(border_style="thin", color="000000")border = Border(top=thin, left=thin, right=thin, bottom=thin)for x in range(1, b + 6):for y in range(1, 14):ws.cell(x, y).border = border# 设置对其方式for x in range(1, b + 6):for y in range(1, 14):ws.cell(x, y).alignment = Alignment(horizontal='center', vertical='center', wrapText=True)for x in range(3, b + 1):ws.cell(x, 2).alignment = Alignment(horizontal='right', vertical='center')# 设置行高列宽ws.row_dimensions[1].height = 15ws.row_dimensions[2].height = 30ws.column_dimensions['B'].width = 22ws.column_dimensions['M'].width = 11# 设置A4纸横向ws.set_printer_settings(paper_size=9, orientation='landscape')# 设置水平居中打印,重复打印标题ws.print_options.horizontalCentered = Truews.print_titles_cols = 'A:M'ws.print_title_rows = '1:2'# 保存文件
wb1.save("sample.xlsx")

总结

利用python openpyxl库,对excel进行自动化操作,相对于一张表格接着一张表格的进行新建、复制、粘贴、查找、复制、粘贴,行机械性地进行重复操作,工作效率得到了极大地提高,几秒钟工作簿就做好了,成就感满满。

用python的openpyxl库实现对excel工作表的自动化操作相关推荐

  1. python中对excel工作表的基础操作:xlrd、xlwt模块笔记

    模块介绍 (1)什么是xlrd模块? python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库. (2)为什么使用xlrd模块? 在UI自动化 ...

  2. python使用openpyxl库创建读取Excel表格

    使用openpyxl库读取和写入Excel表格 1.导入openpyxl库 pip install openpyxl 2.创建xlsx文件 import datetime from openpyxl ...

  3. 用Python将多个相同性质Excel工作表整合到一个工作表(.xlsx)中实例

    基础知识: Python爬虫笔记--存储数据的基础知识(Csv.Excel) 项目已经拥有100个如下表格: 每个表中的内容如下: [Target]:将这100个表格整合到一个汇总表中去. 代码如下: ...

  4. python获取excel工作表名称

    你可以使用 Python 的 openpyxl 库来获取 Excel 的工作表名称.具体的方法是: 安装 openpyxl 库:在命令行中输入 pip install openpyxl 在 Pytho ...

  5. 基于Python的高校勤工俭学工资管理系统——实现对excel表格的数据操作(xwlings库)

    基于Python的高校勤工俭学工资管理系统 1 需求概述 1.1 需求分析 勤工俭学是指学校组织的或学生个人从事的有酬劳动,用以助学.在我国,许多高校借以对学生进行劳动技术教育,培养正确的劳动观点和态 ...

  6. python对excel表统计视频教程_Python实现对excel文件列表值进行统计的方法

    本文实例讲述了Python实现对excel文件列表值进行统计的方法.分享给大家供大家参考.具体如下: #!/usr/bin/env python #coding=gbk #此PY用来统计一个execl ...

  7. 用python编excel统计表_Python实现对excel文件列表值进行统计的方法

    本文实例讲述了Python实现对excel文件列表值进行统计的方法.分享给大家供大家参考.具体如下: #!/usr/bin/env python #coding=gbk #此PY用来统计一个execl ...

  8. 使用Python实现对excel数据的处理

    前言 **使用Python实现对excel数据的处理, 预先知识简单介绍 xlrd中 # File_Path是Excel路径,打开Excel工作蒲 workbook = xlrd.open_workb ...

  9. Python利用xlsxwriter实现对Excel写入数据的样式调整(字体,居中等)

    声明:参考大佬文章 参考网上资料发现很少有用xlsxwriter实现用Python对Excel写入数据的同时进行字体样式调整操作的,因为我用的也是xlsxwriter,所以查找总结了一个用xlsxwr ...

最新文章

  1. 4种事务特性,5种隔离级别,7种传播行为
  2. php能力模型,ThinkPHP5--基础篇(模型)
  3. ubuntu系统安装gedit
  4. 快速云原生化,从数据中心到云原生的迁移实践
  5. 主产品清单位于oracle,OPatch failed with error code 73(OracleHomeInventory gets null oracleHomeInfo)...
  6. Excel隐藏的数据处理技巧
  7. 数据结构开发(3):线性表的顺序存储结构
  8. java实现——客户端登录
  9. 3. 狂神的设计模式笔记-代理模式
  10. 用python求正方形面积是多少_长方形正方形面积的计算
  11. 大学计算机协会大一面试,大一学生社团面试自我介绍
  12. 树莓派系统安装 3.5寸LCD驱动安装 ssh远程链接
  13. 共享充电宝为啥能够盈利
  14. python中shelf对象_11.4. shelve — Python 对象持久化 — Python 2.7.18 文档
  15. (转)少儿编程这么火, 究竟学哪一种语言最靠谱?这篇文章说透了!
  16. 破解花式反爬之大众点评-下
  17. 记录Hbuilder项目使用xcode离线打包上传苹果商店踩过的坑
  18. 搜索量过低百度和谷歌竞价账户分别是怎么处理的
  19. U盘安装CentOS7 解决各种问题
  20. 正易判讀 6-4 韓長庚 著

热门文章

  1. axi ps读写pl_Xilinx SDK 初学之——PS对PL寄存器的读写控制
  2. mpc源代码下载,编译,调试
  3. GD库图片裁剪指定形状解决办法(PHP GD库 海报)
  4. info()函数与describe函数
  5. 直流变频电机驱动的技术原理及特点
  6. LabView 下载与安装
  7. MongoDB认识与生产环境配置
  8. Flutter屏幕截图
  9. 试装memcachedb,整理了下安装过程【转】
  10. CXM百科 | 峰终定律,极致的体验总是起起落落起