Python插件 - EXCEL选取列批量赋值单据体某一列

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

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...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息