数据窗口实现与excel双向复制和粘贴

上一篇讲了如和实现excel式的鼠标选择框, 那么框完一块数据,肯定是要复制啊粘贴啊或者清除的.

下面把我实现这些功能的源码贴一下.

 

uf_copy函数的代码:

long l_s_row,l_l_row,l_s_id,l_l_id string s_a,s_b l_s_row=l_start_row l_l_row=l_last_row l_s_id=l_start_dwoid l_l_id=l_last_dwoid if l_start_row>l_last_row then l_s_row=l_last_row l_l_row=l_start_row end if s_a=dw_1.describe("#"+string(l_start_dwoid) & + ".x") s_b=dw_1.describe("#"+string(l_last_dwoid) & + ".x") if long(s_a)>long(s_b) then l_s_id=l_last_dwoid l_l_id=l_start_dwoid end if long l_i,l_thisid string s_sss l_thisid=l_s_id for l_i=l_s_row to l_l_row if l_thisid=l_l_id then //messagebox("","") s_sss=s_sss+uf_getitem(l_i,l_thisid) & +"~r~n" else label1: s_sss=s_sss+uf_getitem(l_i,l_thisid) if l_thisid=l_l_id then s_sss=s_sss+"~r~n" goto label2 else s_sss=s_sss+"~t" end if l_thisid=uf_findnextcol (l_thisid) goto label1 label2: end if l_thisid=l_s_id next clipboard(s_sss)

 

uf_paste函数的代码:

if not(clipboard ()='' or isnull(clipboard ())) then string s_ori,s_char,s_value int i long l_thisrow,l_thisid long l_s_row,l_l_row,l_s_id,l_l_id string s_a,s_b l_s_row=l_start_row l_l_row=l_last_row l_s_id=l_start_dwoid l_l_id=l_last_dwoid if l_start_row>l_last_row then l_s_row=l_last_row l_l_row=l_start_row end if s_a=dw_1.describe("#"+string(l_start_dwoid) & + ".x") s_b=dw_1.describe("#"+string(l_last_dwoid) & + ".x") if long(s_a)>long(s_b) then l_s_id=l_last_dwoid l_l_id=l_start_dwoid end if l_thisrow=l_s_row l_thisid=l_s_id s_ori=string(clipboard()) dw_1.setredraw (false) for i=1 to len(s_ori) s_char=mid(s_ori,i,1) choose case s_char case '~t' uf_setitem(l_thisrow,l_thisid,s_value) l_thisid=uf_findnextcol (l_thisid) s_value='' case '~r' uf_setitem(l_thisrow,l_thisid,s_value) l_thisid=l_s_id l_thisrow=l_thisrow+1 s_value='' case '~n' s_value='' case else s_value=s_value+s_char end choose next dw_1.setredraw (true) end if

 

 uf_clear的代码: 用了一个乱七八糟的字符串来代表这格内容是空的.

long i long l_thisid string sdf sdf="&MD^bv#$v" l_thisid=l_start_dwoid dw_1.setredraw (false) if l_start_row<=l_last_row then for i=l_start_row to l_last_row //if not(clipboard ()='' or isnull(clipboard ())) then uf_setitem(i,l_thisid,sdf) //end if next else for i=l_last_row to l_start_row //if not(clipboard ()='' or isnull(clipboard ())) then uf_setitem(i,l_thisid,sdf) //end if next end if if long(dw_1.describe("#"+string(l_last_dwoid)+".x")) > & long(dw_1.describe("#"+string(l_start_dwoid)+".x")) then do l_thisid=uf_findnextcol(l_thisid) if l_start_row<=l_last_row then for i=l_start_row to l_last_row //if not(clipboard ()='' or isnull(clipboard ())) then uf_setitem(i,l_thisid,sdf) //end if next else for i=l_last_row to l_start_row //if not(clipboard ()='' or isnull(clipboard ())) then uf_setitem(i,l_thisid,sdf) //end if next end if loop until l_thisid=l_last_dwoid else if not l_last_dwoid=l_start_dwoid then do l_thisid=uf_findprecol(l_thisid) if l_start_row<=l_last_row then for i=l_start_row to l_last_row //if not(clipboard ()='' or isnull(clipboard ())) then uf_setitem(i,l_thisid,sdf) //end if next else for i=l_last_row to l_start_row //if not(clipboard ()='' or isnull(clipboard ())) then uf_setitem(i,l_thisid,sdf) //end if next end if loop until l_thisid=l_last_dwoid end if end if dw_1.setredraw (true)

 

实验一下看看效果如何,呵呵

先在excel里复制一堆数据

 

然后粘贴到我的程序里. 注意程序里要对字符型,数字和日期型做好判断才能贴正确.

 

ok. 今天到此.

你可能感兴趣的:(PB,excel,string)