有时候,你也挺可爱的。
docx-mailmerge:案例 | 手册
xlwings:官网 | 手册
0.Something useless
0.1 解题思路
本方案利用了word自带的邮件合并功能中的域代码:
用域代码去代替你需要从docx中替换的文本,然后利用xlwings去excel表格中取值,把取的值利用docx-mailmerge完成域代码部分的替换。
0.2 常用技巧
域代码显示切换:
1.设置策划书的模板文件
1.1 设置模板文件路径
from mailmerge import MailMerge #导入mailmerge模块
SGQCHS = MailMerge(r"C:\Users\Administrator\Desktop\xlwing_Test\Automate\0.M01_项目施工前策划书模板.docx") #选择文件路径
1.2 配合pathlib模块的更好的路径优化
root = pathlib.Path.cwd() #获取当前路径
Ph_MBCB = root / '2.M01附件_目标成本计划书.xlsx' #拼贴出计划书路径
Te_QCHS = root /"Template"/"0.M01_项目施工前策划书模板.docx" #拼贴出模板策划书路径
Te_CNS = root /"Template"/"0.目标成本承诺书模板.docx" #拼贴出模板策划书路径
1.3 设置模板中从excel获取数据值的域名
- 这里以标后预算价举例,我们需要抓取excel中的标后预算价来替换这个值,那么我么你先将标后预算价这个框转换成域代码格式,设置自己想要的域名即可。
1.4 .get_merge_fields()获取docx模板中定义过的域名
[IN] :print(SGQCHS.get_merge_fields())
[Out] :{'MBCB', 'JSDW', 'JZMJ', 'RGF', 'CF', 'JXLX', 'CLF', 'JZWGD', 'CSF', 'CHS_GCMC', 'HTJ', 'JXF', 'JJF', 'XMDD', 'JGLX', 'SJDW', 'ZYFB', 'BHYSJ', 'JLDW'}
1.5 .merge()函数让定义的域名取值
document.merge(域名1='某某值',
域名2='某某值')
**在这里我们可以利用merga函数来联动xlwings抓取的值进行输入。**由于本省邮件合并的域名支持导入文本,所以还需要转换一下格式。
这里还有些值得一提的几个小问题:
- 保留几位小数的问题?
可以利用round函数来调节xlwings抓取值的小数位。 - 百分数的输入问题?
可以用类似**B7SFL = ‘{:.2%}’.format(SFCH.range(“F36”).value,2)**这样的方式来解决。
1.6 xlwings获取单元格的值
xlwings在这里只需要用他的获取单元格数值的函数即可完成与docx的交互。
1.7编制完成模板(部分展示)
2. 【案例】利用脚本造假文件的
2.1 汇总表中标价编制
参数设置页面,输完参数即可自动完成数据编制。
本项目是是可以导出人材机表的,故本次采用到处人才加表汇总的方式。
简单一个数据透视表搞定。
接下来我们把人材机搬进计划书中的“参数设置”
这里由于合同价的问题,我对间接费和措施费有所自行调整。
2.2 7.1表标后价编制
因为有详细的人材机,所以我们考虑筛选出7.1表中需要的材料部分的具体值,可以用来给后续做“标后预算”进行参考。
这里我利用了PQ和数据透视表进行筛选。
PQ的操作见此文章:(目标责任成本编制)Power Query 和Power Pivot 实战汇总零散数据—目标成本编制数据案例
利用pq做出来的透视表们:
钢筋:
混凝土:
砌块:
周转材料:
接下来我们将对应的值填入“参数设置”中的人材机,目的是为了获得分配比例,因为我的脚本是取比例的数值的。
水电材料、其他材料我懒得筛选了,自己瞎编。
剩下的机械费和措施费看着编把,措施费一般是可以从清单捞出来的。同上材料一样,脚本抓取的是比例值。
2.2 7.1表成本价编制
成本价中我们需要老板提供专业分包和劳务的额度,然后根据实际填。
但这个项目是有要求的。
由于机械费并没有这么高,所以这里的利润空间我调成了负数的,然后下降措施费的空间。
到这一步,第一次运行自动化叫版本,到分界线部分即可
这时候生成的脚本还没有对材料费进行划分
所以我们需要对材料费进行手动计算。
2.3 手动计算成本材料
手动计算我们先估计一个预期的利润值,然后用单变量求解一致循环即可得出值。
具体实操部分可以参考这边文章:目标责任成本的调整技巧
最后得出这些黄色部分的分配值
2.4 最终分配数据
符合利润率在2.5%左右。以及利润率在6.0%左右的条件。
以及最后划入模块的值,,符合预期的设想。
3 生成其他的word资料
3.1 部分资料联动结果展示
接下来再一次将脚本重新跑一遍,这次全部跑完。你会在output文件下得到三个文件。用时不到几秒钟。
直接看成本对比吧!(部分展示)
模板对比
数据对比
3.2 一些可以优化的小瑕疵
瑕疵还是有的,比如承诺书的项目部的落款排版其实不太规范,后期有时间的话我可能会用python-docx来进行优化。
4. 后记
4.1 写的话
其实本篇文章本来就是写给同事看的,有炫技的成分,也有看不惯国企的低效、内耗、以及对于技术思维的不理解,他们一成不变的守着旧秩序的传统,一日复一日的如铁律般重复那些旧秩序的操作,我觉得很恶心。
4.2 案例全套文件下载
也许很多年之后,在命运美妙错开的时空里,一个和我同样的想法的同事,希望对你有点帮助吧!
【广西一建】目标责任成本编制自动化脚本