极速审批——轻松搞定Excel内容反写明细表

极速审批——轻松搞定Excel内容反写明细表

开发者广场内容精选NaN-NaN-NaN
解决方案
作者:Tembe TENG 滕贝
推荐理由
为了克服飞书审批系统无法直接导入明细表的局限,我们基于飞书平台实现了自动解析Excel附件,实现数据的快速抓取、处理,并无缝导入飞书审批系统,显著提升工作效率和数据准确度。
一、背景&需求分析
华米(Zepp Health)是一家基于云的健康服务提供商,致力于为消费者提供全方位的健康管理解决方案。作为一家大型跨国企业,我司采购了大量业务系统,也因此在资产管理、日常备货和发货等环节面临着数据处理的挑战。由于飞书审批系统的限制,我们无法直接导入明细表,导致员工必须手动录入数据,这不仅耗时耗力,而且容易出错
因此,我们需要一个能够自动解析 Excel 附件的自动化工具,以实现数据的自动抓取、处理和导入飞书审批系统,从而减少人工操作,提高数据处理速度和准确率。
二、方案调研
开发调研:
  1. 如何设置 Excel 模板,放云文档还是附件。
  1. 集成平台如何解析飞书审批的 Excel 附件。
  1. Excel 附件内容如何跟飞书审批明细表建立映射关系。
  1. 自动化任务是否需要单独一个节点处理。
  1. 审批任务能否自动提交。
三、开发流程
开发关键梳理
1.梳理开发流程
2.确认文件上传云盘空间
审批流程中的 Excel 附件转换成在线 Excel 文档存储在这个文件夹中。
250px|700px|reset
3.创建飞书审批
3.1云文档模板
🔗Demo模板.xlsx,需要转为云文档放到飞书审批作为模板文件。
3.2审批表单内容
3.3自动化节点配置
250px|700px|reset
4.获取审批实例详情
基于飞书审批 api 获取审批实例的详情,用于后续组装 form 表单来提交审批事件
4.1获取 token
--header 'Content-Type: application/json; charset=utf-8' \
--data '{
"app_id": "cli_XXXXXX,
"app_secret": "XXXX"
}'
4.2获取审批实例详情
4.3解析实例数据
我们根据响应的结果,提取 form 数据解析。
[{
"default_value_type": "CURRENT_VALUE",
"display_condition": null,
"enable_default_value": true,
"id": "widget16896781380800001",
"name": "申请人",
"printable": true,
"required": true,
"type": "contact",
"visible": true,
"widget_default_value": "6872179463736737796"
}, {
"default_value_type": "",
"display_condition": null,
"enable_default_value": false,
"id": "widget16896782898140001",
"name": "说明",
"printable": true,
"required": true,
"type": "textarea",
"visible": true,
"widget_default_value": ""
}, {
"default_value_type": "",
"display_condition": null,
"enable_default_value": false,
"id": "widget16966701968880001",
"name": "说明 1",
"printable": true,
"required": true,
"type": "text",
"visible": true,
"widget_default_value": ""
}, {
"default_value_type": "",
"display_condition": null,
"enable_default_value": false,
"id": "widget16896785061270001",
"name": "模板上传(Excel格式)",
"printable": true,
"required": false,
"type": "attachmentV2",
"visible": true,
"widget_default_value": ""
}, {
"children": [{
"default_value_type": "",
"display_condition": null,
"enable_default_value": false,
"id": "widget16958844660630001",
"name": "运输产品(名称)",
"printable": true,
"required": false,
"type": "input",
"visible": true,
"widget_default_value": ""
}, {
"default_value_type": "",
"display_condition": null,
"enable_default_value": false,
"id": "widget16783477033810001",
"name": "运输方式",
"option": [{
"value": "$i18n-lnftg11h-wzzy7f9olt8-1",
"text": "空运"
}, {
"value": "lnftjqab-k6j2mzbopij-1",
"text": "海运"
}, {
"value": "lnftjqab-vsvtouzro4j-3",
"text": "陆运"
}, {
"value": "ls5npyie-zqdte0g8jw-1",
"text": "其他"
}],
"printable": true,
"required": false,
"type": "radioV2",
"visible": true,
"widget_default_value": ""
}, {
"default_value_type": "",
"display_condition": null,
"enable_default_value": false,
"id": "widget16897704909940001",
"name": "目的城市",
"printable": true,
"required": false,
"type": "input",
"visible": true,
"widget_default_value": ""
}, {
"default_value_type": "",
"display_condition": null,
"enable_default_value": false,
"id": "widget16780866391600001",
"name": "数量(个)",
"printable": true,
"required": false,
"type": "number",
"visible": true,
"widget_default_value": ""
}, {
"default_value_type": "",
"display_condition": null,
"enable_default_value": false,
"id": "widget17069396028140001",
"name": "金额",
"option": {
"currencyRange": ["CNY"],
"isCapital": false
},
"printable": true,
"required": false,
"type": "amount",
"visible": true,
"widget_default_value": ""
}],
"default_value_type": "",
"display_condition": null,
"enable_default_value": false,
"id": "widget16780861375370001",
"name": "运输产品明细",
"option": {
"input_type": "FORM",
"mobile_detail_type": "CARD",
"print_type": "FORM"
},
"printable": true,
"required": true,
"type": "fieldList",
"visible": true,
"widget_default_value": ""
}]
考虑我们只做明细表数据反写,故只提取明细表字段,组装如下备用。
[
{
name: '运输产品(名称)',
id: 'widget16958844660630001',
type: 'input',
value: '1',
},
{
name: '运输方式',
id: 'widget16783477033810001',
type: 'radioV2',
value: 1,
},
{
name: '目的国家',
id: 'widget16897704909940001',
type: 'input',
value: '1',
},
{
name: '本次申请运输数量(个)',
id: 'widget16780866391600001',
type: 'number',
value: 0,
},
{
name: '金额',
id: 'widget17069396028140001',
type: 'amount',
value: 0,
},
];
5.创建集成平台流程
↓直接使用在线模版,Step1 依赖于 Step 2,故一起导入并完成配置。
Step1、在线 Excel ->>审批明细->>提交审批
Step2、审批 Excel 附件->>在线 Excel
步骤解析:
5.1自动化节点
飞书审批自动化节点命名为:自动办理,用于监控流程的状态,如果到达自动办理节点,那么执行自动化任务,否则终止任务。
5.2解析 Excel 附件
调用Step2 回调地址并返回在线 Excel 的 token。
解析在线 Excel 的 A->E 列数据。
5.3组装 form
根据步骤4.3 返回值做审批实例表单内容的封装。
function handler(input) {
//运输方式
const projectData = [
{
value: '$i18n-lnftg11h-wzzy7f9olt8-1',
text: '空运',
},
{
value: 'lnftjqab-k6j2mzbopij-1',
text: '海运',
},
{
value: 'lnftjqab-vsvtouzro4j-3',
text: '陆运',
},
{
value: 'ls5npyie-zqdte0g8jw-1',
text: '其他',
},
];
//获取选择框的值
function getID(val) {
let result;
projectData.forEach((item) => {
if (item.text == val) {
result = item.value;
}
});
return result;
}
//main
var json_map = input.main;
for (let i = 0; i < json_map.length; i++) {
delete json_map[i].ext;
delete json_map[i].timezoneOffset;
}
//detail
const jsonData = input.detail.value;
const value = [];
//遍历明细表
for (let i = 0; i < jsonData.length; i++) {
value.push(addJson(jsonData[i]));
}
//产品明细
var fieldList = {
id: 'widget16780861375370001',
type: 'fieldList',
value: value,
};
json_map.push(fieldList);
//组装每条明细记录
function addJson(json) {
var jsonDataArray = [
{
name: '运输产品(名称)',
id: 'widget16958844660630001',
type: 'input',
value: json.name0,
},
{
name: '运输方式',
id: 'widget16783477033810001',
type: 'radioV2',
value: getID(json.name1),
},
{
name: '目的国家',
id: 'widget16897704909940001',
type: 'input',
value: json.name2,
},
{
name: '本次申请运输数量(个)',
id: 'widget16780866391600001',
type: 'number',
value: json.name3,
},
{
name: '金额',
id: 'widget17069396028140001',
type: 'amount',
value: json.name4,
},
];
return jsonDataArray;
}
return JSON.stringify(json_map);
}
5.4同意审批任务
5.5任务提交监控
我们可以根据任务提交的状态做一个自定义的通知。
先进生产力和业务协同平台
联系我们立即试用
更多人气推荐
查看更多

先进团队,先用飞书

欢迎联系我们,飞书效能顾问将为您提供全力支持
分享先进工作方式
输送行业最佳实践
全面协助组织提效
反馈给飞书 CEO:ceo@feishu.cn