Python办公自动化【合并单元格-openpyxl、增加图表-openpyxl、合并工作薄-openpyxl、合并多个文件工作薄-openpyxl】(三)-全面详解(学习总结---从入门到深化)

简介: Python办公自动化【合并单元格-openpyxl、增加图表-openpyxl、合并工作薄-openpyxl、合并多个文件工作薄-openpyxl】(三)-全面详解(学习总结---从入门到深化)



Excel合并单元格-openpyxl

常用方法与属性

函数名&属性  含义
sheet.merge_cells()  合并单元格

代码

from openpyxl import Workbook
def merge_cell():
  '''
 合并单元格
 '''
  wb = Workbook()
  ws = wb.active
  # 合并操作 A1:A5 合并一列
  ws.merge_cells('A1:A5')
  # 合并操作 A1:A5 合并一行
  ws.merge_cells('c1:h1')
  # 合并操作 A1:A5 合并多行,多列
  ws.merge_cells('c4:h8')
  # 注意:从小到大,从上到下,从前到后
  # 保存数据
  wb.save('./create_data/17_合并单元格.xlsx')
if __name__ =="__main__":
  merge_cell()

Excel增加图表-openpyxl

图表的作用:

1、可直观展示统计信息属性(时间性、数量性等),对知识挖掘和信息直观生动感受起关键作用的图形结构,是一种很好的将对象属性数据直观、形象地"可视化"的手段

2、合理的数据图表,会更直观的反映数据间的关系,比用数据和文字描述更清晰、更易懂

3、将工作表中的数据转换成图表呈现,可以帮助我们更好地了解数据见的比例关系及变化趋势,对研究对象做出合理的推断和预测

常用方法与属性

函数名&属性&类  含义
openpyxl.chart.LineChart()  折线图
openpyxl.chart.BarChart()  柱状图
openpyxl.chart.PieChart()  饼状图
openpyxl.chart.Reference(workbook,min_col,min_row,max_col,max_row) 设置图表数据的来源
workbook数据来源工作薄
min_col 开始列
min_row 开始行
max_col 结束列
max_row 结束行
chart.title  设置图表名
chart.x_axis.title  设置x轴名
chart.y_axis.title  设置y轴名
chart.add_data(data)  设置图表数据
sheet.add_chart(图表,位置) 给excel增加图表

代码
折线图

def set_line():
  from openpyxl import Workbook
  from datetime import date
  # 创建一个excel文件
  wb = Workbook()
  # 激活工作簿
  sh = wb.active
  # 设置数据
  rows=[
   ['时间','批次1','批次2','批次3'],
   [date(2030,1,1),40,30,25],
   [date(2030,1,2),40,25,30],
   [date(2030,1,3),50,30,45],
   [date(2030,1,4),30,25,40],
   [date(2030,1,5),25,35,35],
   [date(2030,1,6),20,40,35],
 ]
  # 把数据增加到工作薄里
  for r in rows:
    sh.append(r)
  # 创建图表
  from openpyxl.chart import LineChart,Reference
  chart = LineChart()
  # 给图表选择数据
  data = Reference(sh,min_col=2,min_row=1,max_col=4,max_row=7)
  # 给图表增加数据
  chart.add_data(data)
  # 设置图表的名称
  chart.title = 'Line Chart'
  # 设置图表的x轴名
  chart.x_axis.title = '时间'
  # 设置图表的y轴名
  chart.y_axis.title = '数量'
  # 把图表增加到工作簿
  sh.add_chart(chart,'A9')
  # 保存excel文件
  wb.save('./create_data/18_折线图.xlsx')
if __name__ =='__main__':
  set_line()

柱状图

def set_bar():
  from openpyxl import Workbook
  # 创建一个excel文件
  wb = Workbook()
  # 激活工作簿
  sh = wb.active
   # 设置数据
  rows =[
   ('月份','批次1','批次2'),
   (7,10,30),
   (8,40,60),
   (9,60,70),
   (10,20,30),
   (11,50,40),
   (12,10,50),
 ]
  # 把数据增加到工作薄里
  for r in rows:
    sh.append(r)
  # 创建图表
  from openpyxl.chart import BarChart,Reference
  chart = BarChart()
  # 给图表选择数据
  data = Reference(sh,min_col=2,max_col=3,min_row=2,max_row=7)
  cats = Reference(sh,min_col=1,max_col=1,min_row=2,max_row=7)
  # 给图表增加数据
  chart.add_data(data)
  chart.set_categories(cats)
  # 设置图表的名称
  chart.title = 'Bar Chart'
  # 设置图表的x轴名
  chart.x_axis.title = '月'
  # 设置图表的y轴名
  chart.y_axis.title = '数量'
  # 把图表增加到工作簿
  sh.add_chart(chart)
  # 保存excel文件
  wb.save('./create_data/19_柱状图.xlsx')
if __name__ =='__main__':
  set_bar()

饼状图

from cProfile import label
def set_pie():
  from openpyxl import Workbook
  # 创建一个excel文件
  wb = Workbook()
  # 激活工作簿
  sh = wb.active
  # 设置数据
  rows = [
   ('名称','数值'),
   ('苹果',50),
   ('草莓',30),
   ('椰子',10),
   ('荔枝',40),
 ]
  # 把数据增加到工作薄里
  for r in rows:
    sh.append(r)
  # 创建图表
  from openpyxl.chart import PieChart,Reference
  chart = PieChart()
  # 给图表选择数据
  data = Reference(sh,min_col=2,max_col=2,min_row=2,max_row=5)
  cate = Reference(sh,min_col=1,min_row=2,max_row=5)
  # 给图表增加数据
  chart.add_data(data)
  chart.set_categories(cate)
  # 设置图表的名称
  chart.title = 'Pie Chart'
  # 把图表增加到工作簿
  sh.add_chart(chart)
  # 保存excel文件
  wb.save('./create_data/20_饼状图.xlsx')
if __name__ =='__main__':
  set_pie()

Excel合并工作薄-openpyxl

代码

from openpyxl import load_workbook
def merger_file():
  from openpyxl import Workbook,load_workbook
  # 创建一个新的excel文件,用来存储合并好的数据
  wb = Workbook()
  # 激活当前的Sheet
  sh = wb.active
  # 获取文件
  import os
  names = os.listdir('./base_data/销售表')
  for name in names:
    load_path = f'./base_data/销售表/{name}'
    # 读取文件
    tmp_wb = load_workbook(load_path)
    # 激活读取的文件的Sheet
    tmp_sh = tmp_wb.active
    # 获取里面的数据
    for r in range(2,tmp_sh.max_row+1):
      # 建立一个列表来保存数据
      row_data = []
      for c in range(1,tmp_sh.max_column+1):
        # 通过行和列的索引获取数据
        value = tmp_sh.cell(r,c).value
        # 将当前列的数据增加到一行中记录
        row_data.append(value)
      # 将当前行数据增加到新的excel中
      sh.append(row_data)
  # 保存
  wb.save('./create_data/21_合并多个文件.xlsx')
if __name__ == '__main__':
  merger_file()

Excel合并多个文件工作薄-openpyxl

代码

def merger_file():
  from openpyxl import Workbook,load_workbook
  # 创建一个excel文件,用来保存合并的数据
  wb = Workbook()
  # 获取要合并的文件的文件名
  import os
  names = os.listdir('./base_data/销售表')
  # 遍历文件名,依次取出
  for name in names:
    # 拼接excel完整地址
    path = f'./base_data/销售表/{name}'
    # 获取新的创建的Sheet的名称
    sheet_name = name[:-5]
    # 加载要合并的excel文件
    tmp_wb = load_workbook(path)
    # 激活要合 并的excel文件的Sheet
    tmp_sh = tmp_wb.active
    # 在新的excel中创建一个新的Sheet,名称为合并的文件名
    new_sh = wb.create_sheet(sheet_name)
    # 获取行数据
    for r in range(1,tmp_sh.max_row+1):
      # 定义一个列表用来存储当前行的所有数据
      all_data = []
      # 获取列数据
      for c in range(1,tmp_sh.max_column+1):
        value = tmp_sh.cell(r,c).value
        all_data.append(value)
     # 将数据保存到新的excel中
      new_sh.append(all_data)
  # 删除自动生成的Sheet
  del wb['Sheet']
  # 保存新Excel文件修改
  wb.save('./create_data/22_合并多个文件2.xlsx')
if __name__ == '__main__':
  merger_file()

Excel快速生成工资条

代码

def create_excel():
  from openpyxl import load_workbook,Workbook
  # 加载文件,data_only=True代表显示值
  wb = load_workbook('./base_data/工资数据.xlsx',data_only=True)
  sh = wb.active
  # 读取数据-遍历每行数据
  # 建立一个title列表,用于存储标题
  title = []
  for i,r in enumerate(sh.rows):
    # 判断是否第一行数据
    if i == 0:
      for c in r:
        title.append(c.value)
    else:
      row_data=[]
      for c in r:
        row_data.append(c.value)  
      # 创建一个新的excel文件
      new_wb =  Workbook()
      # 激活Sheet
      new_sh = new_wb.active
      # 增加数据
      new_sh.append(title)
      new_sh.append(row_data)
      # 保存数据
 new_wb.save(f'./create_data/gong_zi/{r[1].value}.xlsx')
if __name__ == '__main__':
  create_excel()

Excel一键格行换色

代码

def create_excel():
  from datetime import date
  from openpyxl import Workbook
  from openpyxl.styles import PatternFill
  # 创建一个excel对象
  wb = Workbook()
  # 激活Sheet
  sh = wb.active
  # 增加数据
  rows = [
   ['Date', 'Batch 1', 'Batch 2','Batch 3'],
   [date(2030,12, 1), 40, 30, 25],
   [date(2030,12, 2), 40, 25, 30],
   [date(2030,12, 3), 50, 30, 45],
   [date(2030,12, 4), 30, 25, 40],
   [date(2030,12, 5), 25, 35, 30],
   [date(2030,12, 6), 20, 40, 35],
 ]
  for r in rows:
   sh.append(r)
  # 创建样式
  bg_color = PatternFill('solid',fgColor='AEEEEE')
  # 设置样式
  for r in range(1,sh.max_row+1):
    if r%2==0:
      for c in range(1,sh.max_column+1):
        sh.cell(r,c).fill = bg_color
  # 保存excel文件
  wb.save('./create_data/23_隔行换色.xlsx')
if __name__ == '__main__':
  create_excel()

Excel统计加班时间

代码

def create_excel():
  from datetime import date
  from openpyxl import Workbook
  # 创建excel对象
  wb = Workbook()
  # 激活数据
  sh = wb.active
  # 增加数据
  rows = [
   ['Date', '姓名', '打卡时间'],
   [date(2030,12, 1), '吕小布','18:50'],
   [date(2030,12, 2),'貂的蝉','18:10'],
   [date(2030,12, 3),'刘备','18:02'],
   [date(2030,12, 4),'吕小布','18:50'],
   [date(2030,12, 5), '张飞','19:22'],
   [date(2030,12, 6), '吕小布','18:50'],
 ]
  for row in rows:
    sh.append(row)
  wb.save('./create_data/24_统计加班时间.xlsx')
def statistics():
   from openpyxl import load_workbook,Workbook
  # 读取数据
  wb = load_workbook('./create_data/24_统计加班时间.xlsx')
  sh = wb.active
  # 统计
  data = []
  for row in range(2,sh.max_row+1):
    # 一条完整的数据
    row_data = []
    for col in range(1,sh.max_column+1):
      value = sh.cell(row,col).value
      row_data.append(value)
    # 统计时间
    # 获取时间
    h,m = row_data[2].split(':')
    # 计算时间 从0:00到打卡的时间
    full = int(h)*60 + int(m)
    rs = full - 18*60
    # 将结果保存到最后一列
    row_data.append(rs)
    #------处理时间 显示问题------
    row_data[0] = row_data[0].date()
    data.append(row_data)
  # 保存
  wb = Workbook()
  sh = wb.active
  for d in data:
    sh.append(d)
  wb.save('./create_data/24_统计加班时间.xlsx')
if __name__ == '__main__':
  create_excel()
  statistics()
目录
相关文章
|
11天前
|
开发者 Python
Python中__init__.py文件的作用
`__init__.py`文件在Python包管理中扮演着重要角色,通过标识目录为包、初始化包、控制导入行为、支持递归包结构以及定义包的命名空间,`__init__.py`文件为组织和管理Python代码提供了强大支持。理解并正确使用 `__init__.py`文件,可以帮助开发者更好地组织代码,提高代码的可维护性和可读性。
15 2
|
27天前
|
Java Python
> python知识点100篇系列(19)-使用python下载文件的几种方式
【10月更文挑战第7天】本文介绍了使用Python下载文件的五种方法,包括使用requests、wget、线程池、urllib3和asyncio模块。每种方法适用于不同的场景,如单文件下载、多文件并发下载等,提供了丰富的选择。
|
28天前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
|
6月前
|
人工智能 Java Python
python入门(二)安装第三方包
python入门(二)安装第三方包
|
1月前
|
机器学习/深度学习 Python
【10月更文挑战第5天】「Mac上学Python 6」入门篇6 - 安装与使用Anaconda
本篇将详细介绍如何在Mac系统上安装和配置Anaconda,如何创建虚拟环境,并学习如何使用 `pip` 和 `conda` 管理Python包,直到成功运行第一个Python程序。通过本篇,您将学会如何高效地使用Anaconda创建和管理虚拟环境,并使用Python开发。
64 4
【10月更文挑战第5天】「Mac上学Python 6」入门篇6 - 安装与使用Anaconda
|
1月前
|
IDE 开发工具 iOS开发
【10月更文挑战第3天】「Mac上学Python 3」入门篇3 - 安装Python与开发环境配置
本篇将详细介绍如何在Mac系统上安装Python,并配置Python开发环境。内容涵盖Python的安装、pip包管理工具的配置与国内镜像源替换、安装与配置PyCharm开发工具,以及通过PyCharm编写并运行第一个Python程序。通过本篇的学习,用户将完成Python开发环境的搭建,为后续的Python编程工作打下基础。
174 2
【10月更文挑战第3天】「Mac上学Python 3」入门篇3 - 安装Python与开发环境配置
|
1月前
|
iOS开发 MacOS Python
【10月更文挑战第1天】「Mac上学Python 1」入门篇1 - 安装Typora与Markdown编辑技巧
本篇将详细介绍如何在Mac系统上安装Typora这款简洁高效的Markdown编辑器,并学习Markdown常用语法。通过本篇,用户能够准备好记录学习笔记的工具,并掌握基本的文档编辑与排版技巧,为后续学习提供便利。
149 1
【10月更文挑战第1天】「Mac上学Python 1」入门篇1 - 安装Typora与Markdown编辑技巧
|
1月前
|
Python
【python从入门到精通】-- 第一战:安装python
【python从入门到精通】-- 第一战:安装python
49 0
|
6月前
|
Java Python 开发者
Python 学习之路 01基础入门---【Python安装,Python程序基本组成】
线程池详解与异步任务编排使用案例-xian-cheng-chi-xiang-jie-yu-yi-bu-ren-wu-bian-pai-shi-yong-an-li
507 3
Python 学习之路 01基础入门---【Python安装,Python程序基本组成】
|
6月前
|
机器学习/深度学习 人工智能 运维
Python从入门到精通:1.1.2了解Python基本概念与安装Python环境
Python从入门到精通:1.1.2了解Python基本概念与安装Python环境