灵犀claw打通py使用最后一公里

wils
wils Lv.2 潜力创作者

Lv.2潜力创作者

昨天有朋友问,如何批量生成合同和送货单

https://bbs.wps.cn/topic/90404

由于数据关系有点复杂,且模板里可能多次使用数据,所以用docxtpl代替邮件合并

import pandas as pd
from docxtpl import DocxTemplate
df1, df2, df3 = pd.read_excel('采购明细.xls', sheet_name=None).values()
tpl2 = DocxTemplate('合同模板.docx')
tpl3 = DocxTemplate('送货单模板.docx')
for i, j in df2.groupby('合同编号'):
    context = {
        'x': df1[df1['合同编号'] == i].to_dict(orient='records')[0],
        'y': j.to_dict('records'),
    }
    tpl2.render(context)
    tpl2.save(f'output/合同_{i}.docx')
for i, j in df3.groupby('合同编号'):
    context = {
        'x': df1[df1['合同编号'] == i].to_dict(orient='records')[0],
        'y': j.to_dict('records'),
    }
    tpl3.render(context)
    tpl3.save(f'output/送货单_{i}.docx')

代码比较简陋,大概意思是:

  • 用pandas读取数据源,这里有三张表,总表、合同明细、送货单明细,以合同编号作为主键,总表里每行一个合同编号,明细表里一个合同编号对应多行记录

  • 用docxtpl读取两个模板

  • 分别对两张明细表,以合同编号进行groupby,之后循环,用对应的模板批量生成结果

  • 在模板里使用context内构造的数据,可以用for循环生成不定行数的表格

都是最简单的应用,但是,对于大多数不熟悉py脚本的朋友来说,怎么使用是个问题

  • 因为先要安装python,选择版本、设置环境变量

  • 安装依赖,代码里用到了pandas和docxtpl,但对于xls格式的数据源,还需要安装xlrd

  • 另外pip安装依赖最好使用国内源

这样看来,对于新手,即使拿到代码,要用起来还是稍显麻烦的


但现在有了灵犀claw

把代码、数据源、模板放到一个文件夹里,直接问灵犀claw

  • 根据桌面上的test文件夹,创建skill,目的是在py里使用docxtpl根据合同模板和送货单模板,用指定的数据源批量生成合同和送货单,这里以"采购明细.xls"为例,以后会指定不同的数据源

灵犀claw会安装依赖,解决运行前的所有问题

另外,如果你需要修改读取数据的方式,比如pandas改用openpyxl

或数据格式有变化

或要解决空数据在模板里显示null,日期格式需要去掉时间等问题

都可以直接让灵犀claw去改

也就是说,即使我把脚本打包成exe,也远不及通过灵犀claw使用来的灵活


灵犀claw打通了新手使用脚本最后一公里的问题,没有门槛轻松上手

拿到py就能用起来,以后再研究进一步的优化🎉

海南省
浏览 132
1
6
分享
6 +1
2
1 +1
全部评论 2
 
HC.旋
HC.旋 WPS资深用户WPS寻令官Lv.2 潜力创作者

Lv.2潜力创作者

跟wils老师学
   福建省
举报
0
1
wils
wilsLv.2 潜力创作者

Lv.2潜力创作者

不敢当😂 我现在纯粹没话找话混个脸熟
· 海南省
举报
1
0