用Python整理Excel表格,利用python处理excel数据
本文主要介绍Python office automation对Excel中的数据进行计算整理,并写成Word示例进行详细讲解。有需要的朋友可以借鉴一下,希望能有所帮助。祝大家进步很大,早日升职加薪。
前言
在前几天的文章中,我们解释了如何从Word表格中提取指定的数据,并按照格式保存在Excel中。今天,我们将根据一位读者提出的真实需求,再次讲解如何使用Python从Excel中计算、整理数据并写入Word。其实不难,主要是以下两步:
Openpyxl读取Excel获取内容,docx读写Word文件,开始吧!
需求确认
首先,我们来看看需要处理的一些Excel数据。因为隐私,资料已经皮卡丘了。
你可以看到有很多数据,有重复的数据。我们要做的就是按照一定的规则对每一列的数据进行计算和整理,并使用Python自动填充到Word中。一般要求如下
以上只是部分要求,更多数据需要在word中填写!
除了按照格式进行处理并存储在word中的指定位置之外,还有一个要求:最终输出的Word文件名需要按照一定的规则生成:
好了,需求分析完了,接下来就看Python怎么解决了!
Python实现
首先,我们使用Python来解析Excel。
fromopenpyxlimportload _ workbook
进口货
#获取桌面的路径
defGetDesktopPath():
returnos . path . join(OS . path . expand user( ~ ), Desktop )
Path=GetDesktopPath() /data/#构成文件夹的路径将在以后重用。
workbook=load _ workbook(filename=path data . xlsx )
Sheet=workbook.active#获取当前页面
#可以通过代码得到数据范围,如果要批量循环迭代的话很方便。
#获取数据范围
打印(纸张.尺寸)
#A1:W10
Openpyxl可以通过以下方式读取单元格
Cells=sheet [A13360A4] #返回A1-A4的4个单元格
Cells=sheet[A]# Get列A。
单元格=工作表[A:C]#获取列A-C
单元格=sheet[5]#获取第5行
#注意,如果上面提到的带有单元格的获取返回嵌套的祖先。
强制细胞:
打印(单元格[0])。value)#遍历单元格仍然需要取出祖先中的元素来获取值。
#获取一个范围内的所有单元格
#还可以使用iter_col返回列
forrowinsheet.iter_rows(最小行=1,最大行=3,最小列=2,最大列=4):
强制箭头:
打印(单元格.值)
知道了原理,我们就可以分析Excel中的数据了。
#SQE
SQE=表[Q2]。价值
#供应商制造商
供应商=表[G2]。价值
#采购订单编号
C2 _ 10=sheet [c23360c10] #返回cell.tuple对象。
#列表推导背后也是如此。
vC2_10=[str(cell[0].value)forcellinC2_10]
#使用set简单的去掉重量然后使用,连接,填入单词形式。
order_num=,。join(set(vC2_10))
#用set简单重复数据删除后,与之连接,用word文件名命名。
order_num_title=“”。join(set(vC2_10))
#产品型号
T2 _ 10=工作表[T2:T10]
vT2_10=[str(cell[0].value)forcellinT2_10]
ptype=“,”。join(set(vT2_10))
#产品描述
P2 _ 10=工作表[P2:P10]
vP2_10=[str(cell[0].value)forcellinP2_10]
信息=,。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 pypiwin32from 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 + 模板.docxfrom 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 = SQEtables[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[fT{i}].value)
tables[6].cell(i, 1).text = str(sheet[fP{i}].value)
tables[6].cell(i, 2).text = str(sheet[fC{i}].value)
tables[6].cell(i, 4).text = str(sheet[fV{i}].value)
tables[6].cell(i, 5).text = str(sheet[fV{i}].value)
tables[6].cell(i, 6).text = 0
tables[6].cell(i, 7).text = str(sheet[fW{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的资料请关注盛行IT软件开发工作室其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。