PRA-only-demo/scripts/gen-word-flow.py

87 lines
3.4 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""生成「Word 报告加工」测试流程:打开比价报告 -> 读全文 -> 查找替换 -> 追加加工说明 -> 插入截图 -> 复制副本 -> 弹窗"""
import json
import os
DESK = "C:/Users/Administrator/Desktop"
SRC = f"{DESK}/淘宝手机比价报告.docx"
SHOT = f"{DESK}/RPA整理测试/整理完成截图.png"
nodes = []
edges = []
def node(nid, comp, label, values, x=300, y=0, output=None, options=None):
n = {
"id": nid,
"componentId": comp,
"label": label,
"values": values,
"position": {"x": x, "y": y},
}
if output:
n["options"] = dict(options or {}, outputVar=output)
elif options:
n["options"] = options
nodes.append(n)
return nid
def link(a, b):
edges.append({"id": f"edge_{a}_{b}", "source": a, "target": b})
seq = []
node("node_start", "Trigger.Manual", "触发·立即执行", {"entryName": "立即执行"}, 240, 70, options={"timeoutMs": 30000})
seq.append("node_start")
y = 160
nid = node("node_open", "Word_Open", "打开比价报告", {"filePath": SRC}, 300, y, output="wordDoc")
seq.append(nid); y += 160
nid = node("node_read", "Word_ReadAll", "读取报告全文", {"objWord": "${wordDoc}"}, 300, y, output="docText")
seq.append(nid); y += 160
nid = node("node_replace", "Word_Replace", "替换标注校验状态",
{"objWord": "${wordDoc}", "oldText": "RPA 自动采集", "newText": "RPA 自动采集(已加工校验)"}, 300, y)
seq.append(nid); y += 160
nid = node("node_enter", "Word_Enter", "文末空行", {"objWord": "${wordDoc}"}, 300, y)
seq.append(nid); y += 160
nid = node("node_write", "Word_Write", "追加加工说明",
{"objWord": "${wordDoc}",
"text": "—— RPA 加工记录:本报告全文 ${len(docText)} 字,已由晨间自动化流程于今日读取校验,并在文末插入整理完成截图。"},
300, y)
seq.append(nid); y += 160
nid = node("node_pic", "Word_InsertPicture", "文末插入整理截图",
{"objWord": "${wordDoc}", "imageaddr": SHOT}, 300, y)
seq.append(nid); y += 160
nid = node("node_save", "Word_Save", "保存修改", {"objWord": "${wordDoc}"}, 300, y)
seq.append(nid); y += 160
nid = node("node_copy", "File_Copy_V1", "复制生成加工版副本",
{"file_type": "file", "file_path": SRC, "folder_path": DESK, "target_path": DESK,
"rename": "1", "name": "淘宝手机比价报告_加工版.docx", "action": "覆盖"}, 300, y)
seq.append(nid); y += 160
nid = node("node_close", "Word_Close", "关闭文档", {"objWord": "${wordDoc}", "isKill": "0"}, 300, y)
seq.append(nid); y += 160
nid = node("node_notice", "Dialog_Notice_V2", "完成通知",
{"text": "Word 报告加工完成:已替换标注、追加说明、插入截图,副本存桌面《淘宝手机比价报告_加工版.docx》",
"title": "加工完成", "time_out": "10"}, 300, y)
seq.append(nid)
for i in range(len(seq) - 1):
link(seq[i], seq[i + 1])
flow = {"id": "flow_word_report_process", "name": "Word 报告加工", "nodes": nodes, "edges": edges, "variables": []}
out = os.path.join(os.environ["APPDATA"], "rpa-studio", "flows", "flow_word_report_process.json")
with open(out, "w", encoding="utf-8") as f:
json.dump(flow, f, ensure_ascii=False, indent=2)
print("written:", out, f"nodes={len(nodes)} edges={len(edges)}")