Python 自动化处理Excel和Word实现自动办公

今天我来分享一些Python办公自动化的方法,欢迎收藏学习,喜欢点赞支持,欢迎畅聊。

Openpyxl

Openpyxl 可以说是 Python 中最通用的工具模块了,它使与 Excel 交互pip install openpyxl
pip install python-docx简直就像在公园里漫步一样。 有了它,你就可以读写所有当前和传统的 excel 格式,即 xlsx 和 xls。

Openpyxl 允许填充行和列、执行公式、创建 2D 和 3D 图表、标记轴和标题,以及大量可以派上用场的其他功能。最重要的是,这个包使你能够在 Excel 中迭代无数行和列,从而使你免于所有烦人的数字运算和绘图。

Python-docx

Python-docx 这个包之于 Word,就像 Openpyxl 之于 Excel。 如果你还没有研究过他们的文档,那么可能应该看看。毫不夸张地说,自从我开始使用 Python 以来,Python-docx 是我使用过的最简单、最不言自明的工具包之一。

它允许你通过插入文本、填写表格并将图像自动渲染到报告中来自动生成文档,而无需任何开销。

让我们创建我们自己的自动化管道。 继续并启动 Anaconda 并安装以下软件包:

pip install openpyxl
pip install python-docx

微软 Excel 自动化

我们加载一个已经创建好的 Excel 工作簿(如下所示):

workbook = xl.load_workbook('Book1.xlsx')
sheet_1 = workbook['Sheet1']

我们将遍历电子表格中的所有行,通过将电流乘以电压来计算,插入功率值:

for row in range(2, sheet_1.max_row + 1):
    current = sheet_1.cell(row, 2)
    voltage = sheet_1.cell(row, 3)
    power = float(current.value) * float(voltage.value)
    power_cell = sheet_1.cell(row, 1)
    power_cell.value = power

完成后,我们将使用计算的功率值生成一个折线图,该折线图将插入到指定的单元格中,如下所示:

values = Reference(sheet_1, min_row = 2, max_row = sheet_1.max_row, min_col = 1, max_col = 1)
chart = LineChart()
chart.y_axis.title = 'Power'
chart.x_axis.title = 'Index'
chart.add_data(values)
sheet_1.add_chart(chart, 'e2')
workbook.save('Book1.xlsx')

提取图表

现在我们已经生成了图表,我们需要将其提取为图像,以便我们可以在 Word 报告中使用它。

首先,我们将声明 Excel 文件的确切位置以及应保存输出图表图像的位置:

input_file = "C:/Users/.../Book1.xlsx"
output_image = "C:/Users/.../chart.png"

然后使用以下方法访问电子表格:

operation = win32com.client.Dispatch("Excel.Application")
operation.Visible = 0
operation.DisplayAlerts = 0
workbook_2 = operation.Workbooks.Open(input_file)
sheet_2 = operation.Sheets(1)

随后,你可以遍历电子表格中的所有图表对象并将它们保存在指定位置,如下所示:

for x, chart in enumerate(sheet_2.Shapes):
    chart.Copy()
    image = ImageGrab.grabclipboard()
    image.save(output_image, 'png')
    pass
workbook_2.Close(True)
operation.Quit()

微软 word 自动化

现在我们已经生成了我们的图表图像,我们必须创建一个模板文档,它是一个普通的 Microsoft Word 文档 (.docx),完全按照我们希望报告的外观制定,包括字体、字体大小、格式和页面结构 .

然后我们需要做的就是为我们的自动化内容创建占位符,即表格值和图像,并使用如下所示的变量名称声明它们。

任何自动化内容都可以在一对双大括号 {{variable_name}} 内声明,包括文本和图像。 对于表格,你需要创建一个包含所有列的模板行的表格,然后需要使用以下符号在上一行和下一行附加:

{%tr for item in variable_name %}

最后一行:

%tr endfor %}

在上图中,变量名是

  • table_contents 用于存储表格数据的 Python 字典
  • 字典键的索引(第一列)
  • 字典值的功率、电流和电压(第二、第三和第四列)

然后我们将我们的模板文档导入 Python 并创建一个字典来存储我们表的值:

template = DocxTemplate('template.docx')
table_contents = []
for i in range(2, sheet_1.max_row + 1):
    table_contents.append({
        'Index': i-1,
        'Power': sheet_1.cell(i, 1).value,
        'Current': sheet_1.cell(i, 2).value,
        'Voltage': sheet_1.cell(i, 3).value
        })

接下来,我们将导入之前由 Excel 生成的图表图像,并将创建另一个字典来实例化模板文档中声明的所有占位符变量:

image = InlineImage(template,'chart.png',Cm(10))
context = {
    'title': 'Automated Report',
    'day': datetime.datetime.now().strftime('%d'),
    'month': datetime.datetime.now().strftime('%b'),
    'year': datetime.datetime.now().strftime('%Y'),
    'table_contents': table_contents,
    'image': image
    }

最后,我们将使用我们的值表和图表图像呈现报告:

template.render(context)
template.save('Automated_report.docx')

总结

就这样,自动生成的 Microsoft Word 报告包含数字和在 Microsoft Excel 中创建的图表。有了它,你就拥有了一个完全自动化的管道,可用于创建可能需要的尽可能多的表格、图表和文档。

源码如下

import openpyxl as xl
from openpyxl.chart import LineChart, Reference

import win32com.client
import PIL
from PIL import ImageGrab, Image
import os
import sys

from docx.shared import Cm
from docxtpl import DocxTemplate, InlineImage
from docx.shared import Cm, Inches, Mm, Emu
import random
import datetime
import matplotlib.pyplot as plt

######## Generate automated excel workbook ########

workbook = xl.load_workbook('Book1.xlsx')
sheet_1 = workbook['Sheet1']

for row in range(2, sheet_1.max_row + 1):
    current = sheet_1.cell(row, 2)
    voltage = sheet_1.cell(row, 3)
    power = float(current.value) * float(voltage.value)
    power_cell = sheet_1.cell(row, 1)
    power_cell.value = power

values = Reference(sheet_1, min_row = 2, max_row = sheet_1.max_row, min_col = 1, max_col = 1)
chart = LineChart()
chart.y_axis.title = 'Power'
chart.x_axis.title = 'Index'
chart.add_data(values)
sheet_1.add_chart(chart, 'e2')

workbook.save('Book1.xlsx')

######## Extract chart image from Excel workbook ########

input_file = "C:/Users/.../Book1.xlsx"
output_image = "C:/Users/.../chart.png"

operation = win32com.client.Dispatch("Excel.Application")
operation.Visible = 0
operation.DisplayAlerts = 0

workbook_2 = operation.Workbooks.Open(input_file)
sheet_2 = operation.Sheets(1)

for x, chart in enumerate(sheet_2.Shapes):
    chart.Copy()
    image = ImageGrab.grabclipboard()
    image.save(output_image, 'png')
    pass

workbook_2.Close(True)
operation.Quit()

######## Generating automated word document ########

template = DocxTemplate('template.docx')

#Generate list of random values
table_contents = []

for i in range(2, sheet_1.max_row + 1):

    table_contents.append({
        'Index': i-1,
        'Power': sheet_1.cell(i, 1).value,
        'Current': sheet_1.cell(i, 2).value,
        'Voltage': sheet_1.cell(i, 3).value
        })

#Import saved figure
image = InlineImage(template,'chart.png',Cm(10))

#Declare template variables
context = {
    'title': 'Automated Report',
    'day': datetime.datetime.now().strftime('%d'),
    'month': datetime.datetime.now().strftime('%b'),
    'year': datetime.datetime.now().strftime('%Y'),
    'table_contents': table_contents,
    'image': image
    }

#Render automated report
template.render(context)
template.save('Automated_report.docx')

如果你想了解有关数据可视化和 Python 的更多信息,请加入技术交流群。

技术交流

欢迎转载、收藏、有所收获点赞支持一下!

到此这篇关于Python 自动化处理Excel和Word实现自动办公的文章就介绍到这了,更多相关Python 自动化办公内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 教你怎么用Python处理excel实现自动化办公

    一.介绍 实现的是把某个文件夹下的所有文件名提取出来,放入一个列表,在与excel中的某列进行对比,如果一致的话,对另一列进行操作,比如我们在统计人员活动情况的时候,对参加的人需要进行记录. 二.步骤 代统计名单 比如下面这个目录是参与活动的人员名单,每个文件夹为每个人参与活动的相关资料,有些目录是很多人一起参与一个活动,这个时候我要把文件遍历,把名字输入到一个列表中. 相关代码如下 # 保存指定目录下文件名到列表 def Save_name(dirPath): filePath = dirPa

  • python实现自动化办公邮件合并功能

    经常使用word办公的小伙伴们经常会遇到邮件合并的任务,通常会将数量有限的表格中的信息通过word的邮件合并功能,自动生成word文档,操作熟练的技术员通常不到十分钟就可以合并几十份邮件.那么如果遇到成千上万份的邮件需要合并并且需要各自生成文件呢?一个excel大佬也需要很长时间吧!既然我们很难在excel上追上大佬的脚步,何不另辟蹊径,找一条更适合自己的方法呢? 我是一年多前接触到python自动化办公的,通过进一步的学习,发现平时我们的办公效率可以通过使用python的自动化办公方法从而进一

  • 基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)

    1.CSV (1)写csv文件 import csv def writecsv(path,data): with open(path, "w") as f: writer = csv.writer(f) for rowData in data: print("rowData=", rowData) writer.writerow(rowData) path = r"E:\\Python\\py17\\automatictext\\000001.csv&qu

  • python自动化办公操作PPT的实现

    1.python-pptx模块简介 使用python操作PPT,需要使用的模块就是python-pptx,下面来对该模块做一个简单的介绍.这里提前做一个说明:python操作PPT,最好是我们提前设计好自己的一套样式,然后利用进行python进行内容的获取和填充(最主要的功能!),最好是不用使用python代码操作PPT的格式,格式的修改肯定不如我们直接在PPT中修改方便. 可以创建.修改PPT(.pptx)文件 需要单独安装,不包含在Python标准模块里 python-pptx官网介绍:ht

  • 一篇文章告诉你如何用Python控制Excel实现自动化办公

    目录 1.安装 2.操作一个简单的Excel文档 3. 操作简单Excel文档并添加数据格式 4.Excel中添加不同类型的数据 5.Excel中添加数据图表 最后:可能给予你助力的教程 总结 1.安装 2.操作一个简单的Excel文档 操作注释及代码: 操作完成后,数据存储结果如下: 3. 操作简单Excel文档并添加数据格式 操作代码如下: 附带数据格式的定义 操作效果如图所示: 4.Excel中添加不同类型的数据 操作代码如下: 将不同的数据按照指定的格式添加到文件中 代码执行结果如下:

  • Python自动化办公Excel模块openpyxl原理及用法解析

    openpyxl 介绍 openpyxl 是一个直接可用于读写 xlsx .xlsm.xltx.xltm 文件的 Python 内置库,借助它可以利用 Python 语法对本地 xlsx 文件进行自动化批量操作 先说一下安装部分,如果小伙伴们用 Anaconda 作为 Python 环境的话,openpyxl 无需安装可直接使用:需要安装的话方法也非常简单 pip 工具一行命令即可 pip install openpyxl xlsx 文件属性 在对 Excel 表格处理之前,需要了解一下 xls

  • Python 自动化处理Excel和Word实现自动办公

    今天我来分享一些Python办公自动化的方法,欢迎收藏学习,喜欢点赞支持,欢迎畅聊. Openpyxl Openpyxl 可以说是 Python 中最通用的工具模块了,它使与 Excel 交互pip install openpyxl pip install python-docx简直就像在公园里漫步一样. 有了它,你就可以读写所有当前和传统的 excel 格式,即 xlsx 和 xls. Openpyxl 允许填充行和列.执行公式.创建 2D 和 3D 图表.标记轴和标题,以及大量可以派上用场的

  • 使用Python自动化Microsoft Excel和Word的操作方法

    将Excel与Word集成,无缝生成自动报告 毫无疑问,微软的Excel和Word是公司和非公司领域使用最广泛的两款软件.它们实际上是"工作"的同义词.通常情况下,每一周我们都会将两者结合起来,并以某种方式发挥它们的优点.虽然一般的日常用途不会要求自动化,但有时自动化可能是必需的.也就是说,当您有大量的图表.图形.表格和报告要生成时,如果您选择手动方式,它可能会成为一项极其繁琐的工作.其实没必要这样.实际上,有一种方法可以在Python中创建一个管道,您可以将两者无缝集成,在Excel

  • 分享11个Python自动化操作Excel的方法

    目录 一.openpyxl是什么 二.openpyxl安装 三.openpyxl操作指南 1.创建工作簿 2.写工作簿 3.插入图片 4.删除行和列 5.将工作表转换为数据框 6.2D区域图 7.雷达图 8.使用公式 9.给单元格设定字体颜色 10.设定字体和大小 11.设定单元格的边框.字体.颜色.大小和边框背景色 前言: 今天我教大家如何利用Python自动化操作Excel,包括:介绍操作Excel的工具包.安装方法及操作Excel具体方法.对于每天有大量重复性工作的同学来说,这款工具绝对是

  • Python自动化操作Excel方法详解(xlrd,xlwt)

    目录 一.Python操作Excel 7大库对比 二.xlrd 读取excel操作 1. 打开文件 2. 获取所有表名 3. 指定sheet表 4. 对sheet表的行操作 5. 对sheet表的列操作 三.xlwt 写入Excel表操作 1. 写入单个数据 2. 写入多个数据 3. 设置列宽 4. 设置行高 5. 设置单元格风格 一.Python操作Excel 7大库对比 Excel是Windows环境下流行的.强大的电子表格应用.无论是在工作中还是学习中我们都几乎在不间断的使用Excel来

  • Python自动化办公实战案例详解(Word、Excel、Pdf、Email邮件)

    目录 背景 实现过程 1)替换Word模板生成对应邀请函 2)将Word邀请函转化为Pdf格式 4)自动发送邮件 5)完整代码 总结 背景 想象一下,现在你有一份Word邀请函模板,然后你有一份客户列表,上面有客户的姓名.联系方式.邮箱等基本信息,然后你的老板现在需要替换邀请函模板中的姓名,然后将Word邀请函模板生成Pdf格式,之后编辑统一的邀请话术(邮件正文),再依次发送邀请函附件到客户邮箱,你会怎么做? 正常情况下,我们肯定是复制粘贴Excel表格中的客户姓名,之后挨个Word文档进行替换

  • Python自动化办公之Excel拆分与自动发邮件

    目录 需求 需求解析 代码实现 需求 需要向大约 500 名用户发送带有 Excel 附件的电子邮件,同时必须按用户从主 Excel 文件中拆分数据以创建他们自己的特定文件,然后将该文件通过电子邮件发送给正确的用户 需求解析 大致的流程就是上图,先拆分 Excel 数据,提取出对应的邮件地址和用户的数据信息,再自动添加到邮件的附件当中 代码实现 首先我们先来看下我们手中 Excel 的数据形式是怎么样的 import datetime import os import shutil from p

  • Python办公自动化从Excel中计算整理数据并写入Word

    前言 在前几天的文章中我们讲解了如何从Word表格中提取指定数据并按照格式保存到Excel中,今天我们将再次以一位读者提出的真实需求来讲解如何使用Python从Excel中计算.整理数据并写入Word中,其实并不难,主要就是以下两步: openpyxl读取Excel获取内容 docx读写Word文件 那我们开始吧! 需求确认 首先来看下我们需要处理的Excel部分数据,因涉及隐私已经将数据皮卡丘化 可以看到数据非常多,并且还存在重复数据.而我们要做的就是对每一列的数据按照一定的规则进行计算.整理

  • 如何用 Python 子进程关闭 Excel 自动化中的弹窗

    利用Python进行Excel自动化操作的过程中,尤其是涉及VBA时,可能遇到消息框/弹窗(MsgBox).此时需要人为响应,否则代码卡死直至超时 [^1] [^2].根本的解决方法是VBA代码中不要出现类似弹窗,但有时我们无权修改被操作的Excel文件,例如这是我们进行自动化测试的对象.所以本文记录从代码角度解决此类问题的方法. 假想场景 使用xlwings(或者其他自动化库)打开Excel文件test.xlsm,读取Sheet1!A1单元格内容.很简单的一个操作: import xlwing

  • Python自动化办公之Word文件内容的读取

    目录 前言 利用 python 批量读取文件 word利器之python-docx python-docx 安装 python-docx 之 Document python-docx 之段落内容读取 python-docx 之表格内容读取 前言 前面几个章节我们学习了对于普通文件的操作,比如说文件的创建.复制粘贴.裁剪粘贴.文件名的重命名.删除等等.另外还学习了一些基本练习,如何查找文件.如何按照内容查找文件等等. 在本章节及后续,将开始学习一些特殊文件的自动化相关操作.如 word.excel

  • Python自动化办公之Word文档的创建与生成

    目录 保存生成 word 生成标题 生成段落 添加图片 添加表格 分页 上几章节我们主要学习了如何读取文章,而主要任务是读取文档中的文本信息,也就是字符串,而图片本身是不可读的文件所以并没有去读取图片.从今天开始将学习如何通过 python 脚本来自动生成一个 word 文档. 保存生成 word 在学习如何生成一个 word 文档之前,我们来看看如何保存生成 word 文件,因为马上就会用到. 使用方法: document_obj.save(文件地址) ---> /home/demo.docx

随机推荐