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

前言

在前几天的文章中我们讲解了如何从Word表格中提取指定数据并按照格式保存到Excel中,今天我们将再次以一位读者提出的真实需求来讲解如何使用Python从Excel中计算、整理数据并写入Word中,其实并不难,主要就是以下两步:

  • openpyxl读取Excel获取内容
  • docx读写Word文件

那我们开始吧!

需求确认

首先来看下我们需要处理的Excel部分数据,因涉及隐私已经将数据皮卡丘化

可以看到数据非常多,并且还存在重复数据。而我们要做的就是对每一列的数据按照一定的规则进行计算、整理并使用Python自动填入到Word中,大致的要求如下

上面仅是部分要求,真实需要填入word中的数据要更多!

除了对按照格式进行处理并存入Word中指定位置之外,还有一个需求:最终输出的word文件名还需要按照一定规则生成:

OK,需求分析完毕,接下来看Python如何解决!

Python实现

首先我们使用Python对该Excel进行解析

from openpyxl import load_workbook
import os
# 获取桌面的路径
def GetDesktopPath():
    return os.path.join(os.path.expanduser("~"), 'Desktop')

path = GetDesktopPath() + '/资料/' # 形成文件夹的路径便后续重复使用
workbook = load_workbook(filename=path + '数据.xlsx')
sheet = workbook.active # 获取当前页
# 可以用代码获取数据范围,如果要批处理循环迭代也方便
# 获取有数据范围
print(sheet.dimensions)
# A1:W10

利用openpyxl读取单元格有以下几种用法

cells = sheet['A1:A4']  # 返回A1-A4的4个单元格
cells = sheet['A'] # 获取A列
cells = sheet['A:C'] # 获取A-C列
cells = sheet[5] # 获取第5行
# 注意如果是上述用cells获取返回的是嵌套元祖
for cell in cells:
    print(cell[0].value) # 遍历cells依然需要取出元祖中元素才可以获取值
# 获取一个范围的所有cell
# 也可以用iter_col返回列
for row in sheet.iter_rows(min_row=1, max_row=3,min_col=2, max_col=4):
    for cell in row:
        print(cell.value)

明白了原理我们就可以解析获取Excel中的数据了

# SQE
SQE = sheet['Q2'].value
# 供应商&制造商
supplier = sheet['G2'].value
# 采购单号
C2_10 = sheet['C2:C10'] # 返回cell.tuple对象
# 利用列表推导式后面同理
vC2_10 = [str(cell[0].value) for cell in C2_10]
# 用set简易去重后用,连接,填word表用
order_num = ','.join(set(vC2_10))
# 用set简易去重后用&连接,word文件名命名使用
order_num_title = '&'.join(set(vC2_10))
# 产品型号
T2_10 = sheet['T2:T10']
vT2_10 = [str(cell[0].value) for cell in T2_10]
ptype = ','.join(set(vT2_10))
# 产品描述
P2_10 = sheet['P2:P10']
vP2_10 = [str(cell[0].value) for cell in P2_10]
info = ','.join(set(vP2_10))
info_title = '&'.join(set(vP2_10))
# 日期
# 用datetime库获取今日时间以及相应格式化
import datetime
today = datetime.datetime.today()
time = today.strftime('%Y年%m月%d日')
# 验货数量
V2_10 = sheet['V2:V10']
vV2_10 = [int(cell[0].value) for cell in V2_10]
total_num = sum(vV2_10) # 计算总数量
# 验货箱数
W2_10 = sheet['W2:W10']
vW2_10 = [int(cell[0].value) for cell in W2_10]
box_num = sum(vW2_10)
# 生成最终需要的word文件名
title = f'{order_num_title}-{supplier}-{total_num}-{info_title}-{time}-验货报告'
print(title)

通过上面的代码,我们就成功的从Excel中提取出来数据,这样Excel部分就结束了,接下来进行word的填表啦,由于这里我们默认读取的word是.docx格式的,实际上读者的需求是.doc格式文件,所以windows用户可以用如下代码批量转化doc,前提是安装好win32com

# pip install pypiwin32
from win32com import client
docx_path = path + '模板.docx'
# doc转docx的函数
def doc2docx(doc_path,docx_path):
    word = client.Dispatch("Word.Application")
    doc = word.Documents.Open(doc_path)
    doc.SaveAs(docx_path, 16)
    doc.Close()
    word.Quit()
    print('\n doc文件已转换为docx \n')
if not os.path.exists(docx_path):
    doc2docx(docx_path[:-1], docx_path)

不过在Mac下暂时没有好的解决策略,如果有思路欢迎交流,好了有docx格式文件后我们继续操作Word部分

docx_path = path + '模板.docx'
from docx import Document
# 实例化
document = Document(docx_path)
# 读取word中的所有表格
tables = document.tables
# print(len(tables))
# 15

确定好每个表格数后即可进行相应的填报操作,table的用法和openpyxl中非常类似,注意索引和原生python一样都是从0开始

tables[0].cell(1, 1).text = SQE
tables[1].cell(1, 1).text = supplier
tables[1].cell(2, 1).text = supplier
tables[1].cell(3, 1).text = ptype
tables[1].cell(4, 1).text = info
tables[1].cell(5, 1).text = order_num
tables[1].cell(7, 1).text = time

上面代码完成Word中这一部分表格

我们继续用Python填写下一个表格

for i in range(2, 11):
    tables[6].cell(i, 0).text = str(sheet[f'T{i}'].value)
    tables[6].cell(i, 1).text = str(sheet[f'P{i}'].value)
    tables[6].cell(i, 2).text = str(sheet[f'C{i}'].value)
    tables[6].cell(i, 4).text = str(sheet[f'V{i}'].value)
    tables[6].cell(i, 5).text = str(sheet[f'V{i}'].value)
    tables[6].cell(i, 6).text = '0'
    tables[6].cell(i, 7).text = str(sheet[f'W{i}'].value)
    tables[6].cell(i, 8).text = '0'

tables[6].cell(12, 4).text = str(total_num)
tables[6].cell(12, 5).text = str(total_num)
tables[6].cell(12, 7).text = str(box_num)

这里需要注意两个细节:

  • word写入的数据需是字符串,所以从Excel获取的数据需要用str格式化
  • 表格可能存在合并等其他情况,因此你看到的行数和列数可能不是真实的,需要用代码不断测试。

按照上面的办法,将之前从Excel中取出来的数据一一填充到Word中对应位置就大功告成!最后保存一下即可。

document.save(path + f'{title}.docx')
print('\n文件已生成')

结束语

回顾上面的过程,其实从需求和文件格式上看,这次文件的读写解析任务较复杂,码代码和思考时间会较久,所以当我们在考虑使用Python进行办公自动化之前需要想清楚这个问题:这次需要完成的任务是否工作量很多,或者以后长期需要进行,用Python是否可以解放双手?如果不是,实际上手动就可以完成,那么就失去了自动化办公的意义!

点击打开源码地址

以上就是Python办公自动化从Excel中计算整理数据并写入Word的详细内容,更多关于Python Excel数据写入Word的资料请关注我们其它相关文章!

(0)

相关推荐

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

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

  • Python办公自动化Word转Excel文件批量处理

    目录 前言 首先使用Python将Word文件导入 row和cell解析所需内容 内层解析循环 前言 大家好,今天有一个公务员的小伙伴委托我给他帮个忙,大概是有这样一份Word(由于涉及文件私密所以文中的具体内容已做修改) 一共有近2600条类似格式的表格细栏,每个栏目包括的信息有: 日期 发文单位 文号 标题 签收栏 需要提取其中加粗的这三项内容到Excel表格中存储,表格样式如下: 也就是需要将收文时间.文件标题.文号填到指定位置,同时需要将时间修改为标准格式,如果是完全手动复制和修改时间,

  • Python办公自动化处理的10大场景应用示例

    目录 引言 1.Python处理Excel数据 2.Python处理PDF文本 3.Python处理Email 4.Python处理数据库 5.Python处理批量文件 6.Python控制鼠标 7.Python控制键盘 8.Python压缩文件 9.Python爬取网络数据 10.Python处理图片图表 小结 引言 知乎上有个热门问题,Python 未来会成为大众办公常用编程工具吗? 在编程世界里,Python已经是名副其实的网红了.曾经一个学汉语言的研究生,问我怎么学Python,因为他们

  • Python办公自动化批量处理文件实现示例

    目录 引言 需求分析 Python实现 结束语 引言 要说在工作中最让人头疼的就是用同样的方式处理一堆文件夹中文件,这并不难,但就是繁.所以在遇到机械式的操作时一定要记得使用Python来合理偷懒!今天我将以处理微博热搜数据来示例如何使用Python批量处理文件夹中的文件,主要将涉及: Python批量读取不同文件夹() Pandas数据处理() Python操作Markdown文件() 需求分析 首先来说明一下需要完成的任务,下面是我们的文件夹结构 因为微博历史热搜是没有办法去爬的,所以只能写

  • python办公之python编辑word

    目录 1 前言 2 前提准备 2.1 python-docx 的安装 2.2 docx 文档的结构说明 3 具体使用 3.1 创建标题 3.2 创建段落 3.3 创建表格 3.4 文档保存 3.5 获取文档操作 3.6 其它操作 4 总结 1 前言 在工作中时常会有繁重的文案工作,接触了python 之后,就会觉得这个比较简单了,python 操作word 和 excel 是比较常用的操作,相对比较简单,在本文中,我们就以 python 操作 word 为例来介绍一些简单的操作. 2 前提准备

  • Python自动化办公之Word转PDF的实现

    目录 pdf 工具包 - pdfkit html 转 pdf 网址 转 pdf 字符串生成pdf 结合 pydocx 将 word 转 html 再转 pdf 该章节我们将要学习如何将 word 文件转为 PDF文件,其实网上有很多种生成 PDF 的教程,不过绝大多数都是以 windows 为主的,并且兼容有很多的问题.windows.mac.linux 同时兼容的情况比较少,所以今天的章节我们就来学习一下如何在 windows.mac.linux 三种系统中都可以生成 PDF 的解决方案. p

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

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

  • python实现对excel中需要的数据的单元格填充颜色

    前言: 一般处理数据使用的是pandas和numpy库,但是填充单元格颜色需要在excel中,使用的是openpyxl库,所以不能直接达到我们的需求,需要进行两个库的链接使用,先说下openpyxl填充色,pandas是直接读取数据,但是openpyxl则不是,必须要sheet处于active状态,而且必须进行sheet选择才可以读取数据 import openpyxl from openpyxl import load_workbook # 比如打开test.xlsx wb = load_wo

  • 基于python实现在excel中读取与生成随机数写入excel中

    具体要求是:在一份已知的excel表格中读取学生的学号与姓名,再将这些数据放到新的excel表中的第一列与第二列,最后再生成随机数作为学生的考试成绩. 首先要用到的数据库有:xlwt,xlrd,random这三个数据库. 命令如下: import xlwt import xlrd import random 现有一份表格内容如下图: 现在我们需要提取这其中的B1-C14. (提示:在对这份电子表格进行操作的时候,要使用到这个电子表格的地址,即表格的储存位置.) excel=xlrd.open_w

  • Python办公自动化之Excel(中)

    准备 首先,我们需要安装依赖包 # 安装依赖包 pip3 install openpyxl 读取数据 使用 openpyxl 中的 load_workbook(filepath) 加载本地一个 Excel 文件,返回结果是一个工作簿对象 import openpyxl # 加载本地的Excel文件 wb = openpyxl.load_workbook(file_path) 利用工作簿对象,可以获取所有的 Sheet 名称及 Sheet 列表 def get_all_sheet_names(wb

  • 利用python对Excel中的特定数据提取并写入新表的方法

    最近刚开始学python,正好实习工作中遇到对excel中的数据进行处理的问题,就想到利用python来解决,也恰好练手. 实际的问题是要从excel表中提取日期.邮件地址和时间,然后统计在一定时间段内某个人在某个项目上用了多少时间,最后做成一张数据透视表(这是问题的大致意思). 首先要做的就是数据提取了,excel中本身有一个text to column的功能,但是对列中规律性不好的数据处理效果很差,不能分割出想要的数据,所以我果断选择用python来完成. 要用的库一个是对excel读写处理

  • python办公自动化之excel的操作

    准备 使用 Python 操作 Excel 文件,常见的方式如下: xlrd / xlwt openpyxl Pandas xlsxwriter xlwings pywin32 xlrd 和 xlwt 是操作 Excel 文件最多的两个依赖库 其中, xlrd 负责读取 Excel 文件,xlwt 可以写入数据到 Excel 文件 我们安装这两个依赖库 # 安装依赖库 pip3 install xlrd  pip3 install xlwt  xlrd 读取 Excel 使用 xlrd 中的 o

  • Python办公自动化之Excel介绍

    目录 前言 一.创建.打开excel文件 二.工作表中的数据操作 写数据 读数据 删除数据 三.csv文件转xlsx 前言 Python处理Excel的包是openpyxl,其支持操作的文件类型为:.xlsx, .xlsm, .xltx, .xltm pip install openpyxl 安装完成之后,我们应该了解一下Excel的组成部分,如下图所示: Excel文件中三个对象 workbook: 工作簿,就是一个excel文件sheet:工作表,一个workbook有多个工作表,表名识别,

  • 教你用python提取txt文件中的特定信息并写入Excel

    目录 问题描述: 工具: 操作: 源代码: Reference: 总结 问题描述: 我有一个这样的数据集叫test_result_test.txt,大概几百上千行,两行数据之间隔一个空行. N:505904X:0.969wsecY:0.694wsec N:506038X:4.246wsecY:0.884wsec N:450997X:8.472wsecY:0.615wsec ... 现在我希望能提取每一行X:和Y:后面的数字,然后保存进Excel做进一步的数据处理和分析 就拿第一行来说,我只需要0

  • Python实现在Excel中绘制可视化大屏的方法详解

    目录 数据清洗 绘制图表 生成可视化大屏 大家新年好哇,今天小编来给大家分享如何在Excel文档当中来绘制可视化图表,并且制作一个可视化大屏,非常的容易,这里我们会用到openpyxl模块,那么首先第一步便是调用该模块来读取Excel文件,代码如下 # 读取Excel文档并且指定工作表的名称 file_name = 'Bike_Sales_Playground.xlsx' df = pd.read_excel(file_name,sheet_name='bike_buyers') 当然为了保险起

  • 解决python pandas读取excel中多个不同sheet表格存在的问题

    摘要:不同方法读取excel中的多个不同sheet表格性能比较 # 方法1 def read_excel(path): df=pd.read_excel(path,None) print(df.keys()) # for k,v in df.items(): # print(k) # print(v) # print(type(v)) return df # 方法2 def read_excel1(path): data_xls = pd.ExcelFile(path) print(data_x

随机推荐