DATABASE ds
GLOBALS "../../config/top.global"
----------------------------------------------------------------------------------------------------------------------------
----Function........: 单身数据直接复制到EXCEL
----Description.....: 特么太忙,没有时间做成公共函数.
----................: EXCEL内容复制到单身暂时没空写,有想法的童鞋私聊
----................: 为了节约代码,无关紧要的判断去掉,整个功能30行代码
----Example.........: CALL cxmt666_copybody(base.TypeInfo.create(Wait_CT_List),Wait_CT_List.GetLength())
----Date&Author.....: add by kellan 2015-04-23 QQ: 309200966 联系人:匡匡
----version1.0......: marked by kellan 2015-04-29 (无抬头内容)
----version2.0......: modified by kellan 2015-04-29 (增加抬头内容,针对多单身复制,加上page参数传入,page中英文皆可)
----Example.........: CALL cxmt666_copybody(base.TypeInfo.create(Wait_CT_List),Wait_CT_List.GetLength(),page)
----Question........: 待解决: 1.单身有栏位排序(或者顺序拖动),复制的时候栏位不会按照改变后的顺序;
--------------------: 2.单身有栏位隐藏,出现一些空白列;
--------------------: 3.多页签一起复制;
--------------------: 4.(程序逆推)EXCEL多行内容复制粘贴进程序单身;
----------------------------------------------------------------------------------------------------------------------------
{#(version1.0)版本一:
FUNCTION cl_copybody(l_tab,l_len)
DEFINE l_tab om.DomNode,
l_len INTEGER,
l_value STRING,
l_str1 STRING,
l_str2 STRING
DEFINE n_field om.DomNode,
n_record om.DomNode,
nl_record om.NodeList,
nl_field om.NodeList
DEFINE l_i LIKE type_file.num10
DEFINE l_j LIKE type_file.num10
DEFINE i INTEGER #本来用来检测复制成功与否的状态,为了节约代码就没写判断了.
DEFINE l_show LIKE type_file.chr1
DEFINE l_values STRING
LET l_value = NULL
LET l_str1 = NULL
LET l_str2 = NULL
LET nl_record = l_tab.selectByTagName("Record")
FOR l_i=1 to nl_record.getLength()
LET n_record = nl_record.item(l_i)
LET nl_field=n_record.selectByTagName("Field")
LET l_str1 = NULL
FOR l_j = 1 TO nl_field.getLength()
LET n_field = nl_field.item(l_j)
LET l_value = n_field.getAttribute("value")
LET l_str1 = l_str1,l_value,'%'
END FOR
LET l_str2 = l_str2,l_str1,'\n'
END FOR
CALL cl_replace_str(l_str2,'%','\t') RETURNING l_str2
CALL ui.Interface.frontCall( "standard", "cbclear",[], [i] ) #清除当前剪切板里的内容
CALL ui.Interface.frontCall( "standard", "cbset",[l_str2],[i] ) #设置当前剪切板里的内容
CALL cl_err("复制成功,请直接在excel中粘贴!","!","1")<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
END FUNCTION }
###(version2.0)版本二:
FUNCTION cl_copybody(l_tab,l_len,p_currentpage)
DEFINE l_tab om.DomNode,
l_len INTEGER,
l_value STRING,
l_str1 STRING,
l_str2 STRING
DEFINE n_field om.DomNode,
n_record om.DomNode,
nl_record om.NodeList,
nl_field om.NodeList
DEFINE l_i LIKE type_file.num10
DEFINE l_j LIKE type_file.num10
DEFINE i INTEGER #本来用来检测复制成功与否的状态,为了节约代码就没写判断了.
DEFINE n_root om.DomNode,
n_table,n_tablecolumn om.DomNode,
lst_table om.NodeList,
l_strcol STRING,
l_str4 STRING
DEFINE l_laststr STRING
DEFINE w ui.Window
DEFINE n_node om.DomNode
DEFINE lst_page om.NodeList
DEFINE l_page om.DomNode
DEFINE l_pagestr STRING
DEFINE l_pagechinese STRING
DEFINE l_pagecount INTEGER
DEFINE l_pi INTEGER
DEFINE p_currentpage STRING
-- DEFINE l_show LIKE type_file.chr1 #处理隐藏栏位
LET l_str1 = NULL
LET l_str2 = NULL
LET l_str4 = NULL
LET l_value = NULL
LET l_strcol = NULL
LET l_pagestr = NULL
LET l_laststr = NULL
LET l_pagechinese = NULL
------------------------------------------------------------------------- 表头部分
#begin用于取页签名称
LET w = ui.Window.getCurrent()
LET n_node = w.getNode()
LET lst_page = n_node.selectByTagName("Page")
LET l_pagecount = lst_page.getLength() #总的page页面数量
FOR l_pi = 1 TO l_pagecount
LET l_page = lst_page.item(l_pi)
LET l_pagestr = l_page.getAttribute('name') #page英文名
LET l_pagechinese = l_page.getAttribute('text') #page中文名
#end用于取页签名称
DISPLAY l_pagestr,l_pagechinese,l_pagecount
IF (p_currentpage = l_pagestr OR p_currentpage = l_pagechinese) THEN
#begin获取table表头
LET n_root = ui.Interface.getRootNode()
LET lst_table = n_root.selectByTagName("Table")
LET n_table = lst_table.item(l_pi)
FOR i=1 TO n_table.getChildCount()
LET n_tablecolumn = n_table.getChildByIndex(i)
LET l_strcol = n_tablecolumn.getAttribute('text') #获取栏位中文
-- LET l_show = n_tablecolumn.getAttribute("hidden") #获取栏位是否隐藏 哈哈哈..这样判断是有问题的.
-- IF l_show = "0" OR l_show IS NULL THEN
LET l_str4 =l_str4,l_strcol,'%%%'
-- END IF
END FOR
#end获取table表头
END IF
END FOR
------------------------------------------------------------------------- 表头部分<span style="white-space:pre"> </span>
#begin表身所有数据
LET nl_record = l_tab.selectByTagName("Record")
FOR l_i=1 to nl_record.getLength()
LET n_record = nl_record.item(l_i)
LET nl_field=n_record.selectByTagName("Field")
LET l_str1 = NULL
FOR l_j = 1 TO nl_field.getLength()
LET n_field = nl_field.item(l_j)
LET l_value = n_field.getAttribute("value")
-- LET l_show = n_field.getAttribute("hidden") #获取栏位是否隐藏 哈哈哈..这样判断是有问题的.
-- IF l_show = "0" OR l_show IS NULL THEN
LET l_str1 = l_str1,l_value,'%%%'
-- END IF
END FOR
LET l_str2 = l_str2,l_str1,'\n'
END FOR
#end表身所有数据
LET l_laststr = l_str4,'\n',l_str2
CALL cl_replace_str(l_laststr,'%%%','\t') RETURNING l_laststr #组合表头表身,替换'%%%'为table键
CALL ui.Interface.frontCall( "standard", "cbclear",[], [i] ) #清除当前剪切板里的内容
CALL ui.Interface.frontCall( "standard", "cbset",[l_laststr],[i] ) #设置当前剪切板里的内容 哈哈哈..不得不承认ctrl+c,ctrl+v的强大
CALL cl_err("复制成功,请直接在excel中粘贴!","!","1")
END FUNCTION