学习笔记-明细EXCEL导入功能

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

学习笔记-明细EXCEL导入功能

    标准单据的EXCEL导入麻烦,而且对于单据的明细行导入不支持,所以二开一种简单复制粘贴的功能,快速实现明细行的导入。  因为产品不支持对剪切板读写功能,所以只能手动从输入框中复制粘贴。

  1.新增一个简单的动态表单,用于复制粘贴内容。

image.webpa在单据体中增加足够多的列(列不够按照FCOL+数字的标识 继续增加)

b.定义剪切板的识别规则,例如excel的\n换行 \t换格,也可以将换成对接系统的json格式,将文本转换成单据体数据。

c.默认首行为标题行,修改列标题,隐藏多余的列

Kingdee.BOS.XPF.App_BxnTQOjpB0.webp

关键代码

 string pasteText =Convert.ToString(this.Model.GetValue("FGETTXT"));
                string[] lines = pasteText.Trim().Split('\n');
                string[] valsa = lines[0].Split('\t');
                Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity");
               
                bool havtitle = Convert.ToBoolean(this.Model.GetValue("FHAVETITLE"));
                bool FISADD = Convert.ToBoolean(this.Model.GetValue("FISADD"));
                if (!FISADD) {
                    this.View.Model.DeleteEntryData("FEntity");
                }
                int sindex = 0;
                if (havtitle) {
                    sindex = 1;
                }
                int rowcount = this.View.Model.GetEntryRowCount("FEntity");
                for (int i = sindex; i < lines.Length; i++)
                {
                    string[] vals = lines[i].Split('\t');
                    this.View.Model.CreateNewEntryRow("FEntity"); int j = 1;
                    this.View.Model.SetValue("FCHECK", true, i - sindex+ rowcount);
                    foreach (string tmp in vals)
                    {
                        string ntmp = tmp.Replace("\n", "").Replace(" ", "").Replace("\t", "").Replace("\r", "").Replace("NULL", "").Replace(",", "").Replace(",", "");

                        this.View.Model.SetValue("FCOL" + j.ToString(), ntmp, i - sindex+ rowcount);

                        j++;
                    }
                }

                this.View.UpdateView();

                List<EnumItem> valueItem = new List<EnumItem>();

                selids = ""; selname = new List<string>();
                foreach (var pr in entity.DynamicObjectType.Properties)
                    {
                    
                        if (pr.Name.Contains("FCOL"))
                        {
                            int rindex = Convert.ToInt32(pr.Name.Replace("FCOL", ""));
                            if (rindex > valsa.Length)
                            {
                                this.View.StyleManager.SetVisible(pr.Name, "", false);
                            }
                            else
                            {
                            selids += rindex.ToString() + ",";
                            EnumItem ei= new EnumItem();string coltxtx = rindex.ToString();
                            if (havtitle)
                            {
                                coltxtx = valsa[rindex - 1];
                                coltxtx = coltxtx.Replace("\n", "").Replace(" ", "").Replace("\t", "").Replace("\r", "").Replace("NULL", "").Replace(",", "").Replace(",", "");
                                this.View.GetControl(pr.Name).Text = valsa[rindex - 1];
                            }
                            ei.Value = rindex.ToString(); ;
                            selname.Add(coltxtx);
                            ei.Caption = new Kingdee.BOS.LocaleValue(coltxtx);

                            valueItem.Add(ei);
                        }
                        }
                    }
                selids = selids.Substring(0, selids.Length - 1);

                this.View.GetFieldEditor<ComboFieldEditor>("FMULSEL", 0).SetComboItems(valueItem);

2.在单据中,加入菜单按钮,点击跳转此动态页面,然后对返回值进行处理。可以根据名称匹配自动对应字段


除了从excel中复制,也可以从其他单据中复制单据体。将单据体信息转换成excel格式,然后进行粘贴转换。

  1. 没有找到 页面之间的传参方法,只能通过复制的方式。

  2. 系统在弹出提示信息的时候,会自动将制表符 转换成空格,所以还是需要一个控件进行复制。

    Kingdee.BOS.XPF.App_THGsyvvIJL.webp


不明觉厉。与星空本身的块粘贴有什么区别?

学习笔记-明细EXCEL导入功能

标准单据的EXCEL导入麻烦,而且对于单据的明细行导入不支持,所以二开一种简单复制粘贴的功能,快速实现明细行的导入。 因为产品不支...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息