Python插件 - EXCEL选取列批量赋值单据体某一列
# 需求
- EXCEL某列数据选取粘贴到文本框直接对单据体进行更新操作
- 减少用户手动选择优化交互
![image.webp](/download/010089a39e2f524c4d3f81ca481a2a30c980.webp)
# 功能实现截图
![image.webp](/download/010079ca204a73ac423ab1d91d0367e4aefc.webp)
![image.webp](/download/010023256dfff8644c4db09051230ff71b8a.webp)
![16xka-07k0p.webp](/download/010088f4ac6d889c440bb7455c8b54d29fec.webp)
# 实现过程
## 新增一个动态表单
![image.webp](/download/0100c05cc0fbe7df4d01a77f5083d0a2f620.webp)
## 拖入一个多行文本
![image.webp](/download/0100ce03a947a78841e08c1ba34e951032bc.webp)
## 给动态表单增加菜单
![image.webp](/download/0100fab31f21254f4a47bab008f1020607ab.webp)
- 动态表单挂一个表单插件,用于传值给父窗体
## 注册Python插件代码
``` python
#作者: 老李头(Dean)
import clr
clr.AddReference("System")
clr.AddReference("System.Core")
clr.AddReference("Kingdee.BOS")
clr.AddReference("Kingdee.BOS.App")
clr.AddReference("Kingdee.BOS.Core")
clr.AddReference("Kingdee.BOS.DataEntity")
#引入命名空间
from Kingdee.BOS.Core.DynamicForm import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
from Kingdee.BOS.Core.List.PlugIn import *
from Kingdee.BOS.Orm.DataEntity import *
from Kingdee.BOS.Util import *
from System import *
from System.Collections.Generic import *
from System.ComponentModel import *
def BarItemClick(e):
#如果是改动项插入则改变状态
if e.BarItemKey.Equals("tbReturnData"):#返回数据按钮的标识
text = str(this.Model.GetValue("F_SMTO_Remarks")); #多行文本
this.View.ReturnToParentWindow(text);
this.View.Close();
return;
elif e.BarItemKey.Equals("tbClose"):#取消关闭窗口
this.View.Close();
return;
return;
```
## 目标单据
### 单据体增加一个按钮触发弹窗
![1688790638793.webp](/download/0100de1e7b57d92541e39131f46ff3827167.webp)
## 挂一个表单插件
![image.webp](/download/0100b12bc66575d24dfa88b85f98455c7542.webp)
- 插件注意事项 ORM实体名
![1688790000789.webp](/download/0100ea389f79873a4c28ac49340e87b6a233.webp)
## 注册Python插件代码
``` python
#作者: 老李头(Dean)
import clr
clr.AddReference("System")
clr.AddReference("System.Core")
clr.AddReference("Kingdee.BOS")
clr.AddReference("Kingdee.BOS.App")
clr.AddReference("Kingdee.BOS.Core")
clr.AddReference("Kingdee.BOS.DataEntity")
#引入命名空间
from Kingdee.BOS.Core import*
from Kingdee.BOS.Core.Metadata import *
from Kingdee.BOS.Core.DynamicForm import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from Kingdee.BOS.Orm.DataEntity import *
from Kingdee.BOS.Util import *
from System import *
from System.ComponentModel import *
from System.Linq import *
#全局变量
def EntryBarItemClick(e):
#如果是改动项插入则改变状态
dynamicFormShowParameter = DynamicFormShowParameter();
dynamicFormShowParameter.FormId = "SMTO_KUAIZHANTIE";#弹出框动态表单标识
if e.BarItemKey.Equals("SMTO_tbButton_2"): #触发弹窗的按钮标识
this.View.ShowForm(dynamicFormShowParameter,lambda x: SetModel(x));
return;
def SetModel(results):
if results is None or results.ReturnData is None:#弹出框回调的数据
return;
allbill = results.ReturnData.ToString();
DataObject = this.View.Model.DataObject["FEntity"];#注意这里是单据体ORM实体名称
for item in allbill.splitlines():#获取分行数据
if item == "":
continue
dyo = FirstOrDefault(DataObject,lambda x:x["F_SOURCR1"].ToString() == item);#判断是否相同的数据
if dyo is not None:
seq = int(dyo["Seq"].ToString());
if seq >-1:
this.Model.SetValue("F_SMTO_CHECKBOX",True, seq-1);#多选标识勾选
else:
this.View.ShowMessage("单据{0}不存在".format(item));
return;
def FirstOrDefault(col, fun = lambda x: True):
return Enumerable.FirstOrDefault[object](col, Func[object, bool](fun))
```
- 刚开始使用 allbill.split('\n') 获取分行数据,HTML5端是可以的但是客户端是有问题的,最后改为splitlines()内置函数就没问题了!
Python插件 - EXCEL选取列批量赋值单据体某一列
# 需求- EXCEL某列数据选取粘贴到文本框直接对单据体进行更新操作- 减少用户手动选择优化交互![image.webp](/download/010089a39e2f524c...
点击下载文档
本文2024-09-16 17:14:09发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-14405.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章