以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  求助:导入剪贴板的数据的代码  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=8436)

--  作者:migold
--  发布时间:2010/10/24 11:15:00
--  求助:导入剪贴板的数据的代码

如题!求助高手写个简单代码高效率

 

在Excel文件中复制内容,打开狐表表格进行贴粘,能够自动对应列进行贴粘。

贴粘按钮,代码如下:

 

Dim vWIN1v,vTB1v,vTB2v,Values1(),Values2(),s As String
vWIN1v = "窗口48"
vTB1v = vWIN1v & "_Table1" \'临时表
vTB2v = CurrentTable.Name \'粘贴表
Dim ii,n As Integer
If Tables(vTB2v).AllowEdit Andalso ClipBoard.ContainsText Then \'判断字符串,判断粘贴表可编辑
    For Each cl As Col In Tables(vTB2v).Cols
        If cl.Visible Andalso cl.AllowEdit Then
            ii = 1
        End If
    Next
    If ii = 1 Then \'粘贴的目标表必须有可见列并且可编辑列
        s = ClipBoard.GetText() \'获取总的字符串
        n = s.Length - s.Replace(chr(13),"").Length
        If n > 1 Then \'判断复制的记录必须大于1
            Values1 = s.Split(chr(13)) \'拆为复制的内容为一行一行记录
            Values2 = Values1(0).Split(vbTab) \'提取复制的内容的列数
            Forms(vWIN1v).Show()
            DataTables(vTB1v).DataRows.Clear() \'清空记录
            Tables(vTB1v).AllowEdit = True \'可编辑表
            Application.DoEvents
            If Values2.Length > Tables(vTB1v).Cols.Count Then \'临时表的列数不足进行添加列
                For i As Integer = Tables(vTB1v).Cols.Count + 1 To Values2.Length
                    DataTables(vTB1v).DataCols.Add("第" & i & "列",Gettype(String),255)
                Next
            End If
            Tables(vTB1v).AddNew(n) \'临时表添加行
            Tables(vTB1v).Select(0,0) \'临时表选定第一行第一列的单元格
            Tables(vTB1v).Focus \'移动焦点到临时表
            Tables(vTB1v).StopRedraw \'关闭绘制
            Syscmd.Edit.Paste() \'粘贴到临时表
            Tables(vTB1v).ResumeRedraw \'恢复绘制
            Application.DoEvents
            If Tables(vTB1v).Rows.Count > 1 Then \'临时表的记录大于1行
                Dim dr As Row = Tables(vTB1v).Rows(0) \'提取临时表的第一行记录
                For Each cl1 As DataCol In DataTables(vTB1v).DataCols \'临时表修改标题
                    If dr(cl1.Name) IsNot Nothing Andalso dr(cl1.Name) <> "" Then \'临时表的单元格不为空
                        For Each cl2 As Col In Tables(vTB2v).Cols \'粘贴表相同标题
                            If cl2.AllowEdit Andalso cl2.Visible Then \'粘贴表的可编辑列与可显示列
                                If cl2.Caption IsNot Nothing Andalso cl2.Caption <> "" Then \'标题不为空
                                    If cl2.Caption = dr(cl1.Name) Then
                                        cl1.Caption = cl2.Name
                                    End If
                                Else \'标题为空
                                    If cl2.Name = dr(cl1.Name) Then
                                        cl1.Caption = cl2.Name
                                    End If
                                End If
                            End If
                        Next
                    End If
                Next
                DataTables(vTB1v).BuildHeader
                Tables(vTB1v).Rows.Delete(0)
                Dim drnew As Row
                For Each dr1 As Row In Tables(vTB1v).Rows \'循环临时表的所有行
                    drnew = Tables(vTB2v).AddNew()
                    For Each cl1 As DataCol In DataTables(vTB1v).DataCols \'循环临时表的所有标题
                        If cl1.Caption IsNot Nothing Andalso cl1.Caption <> "" Then \'临时表标题不为空
                            drnew(cl1.Caption) = dr1(cl1.Name)
                        End If \'临时表标题不为空
                    Next \'循环临时表的所有标题
                Next \'循环临时表的所有行
            End If
            Application.DoEvents
            Forms(vWIN1v).Close()
        Else
            MessageBox.Show("复制的记录必须大于1,请检查!!!","提示")
        End If
    Else
        MessageBox.Show("粘贴的目标表必须有可见列并且是可以编辑列,请检查!!!","提示")
    End If
Else
    MessageBox.Show("粘贴的目标表必须是可编辑,并且粘贴的内容必须是数据,请检查!!!","提示")
End If