Foxtable(狐表)用户栏目专家坐堂 → 当从EXECL中一次性地复制多列数据到当前表中的时候


  共有17966人关注过本帖树形打印复制链接

主题:当从EXECL中一次性地复制多列数据到当前表中的时候

帅哥哟,离线,有人找我吗?
yankunhao
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1028 积分:7211 威望:0 精华:0 注册:2008/9/1 22:34:00
当从EXECL中一次性地复制多列数据到当前表中的时候  发帖心情 Post By:2010/6/25 20:25:00 [显示全部帖子]

当用户从EXECL中一次性地复制多列数据到当前表中的时候,如果这个表中没隐藏列的时候,就能顺利地得到所想的数据,但如果有隐藏列的时候,且隐藏的列位于显示列中间的时候,当粘贴命令执行时,被隐藏的列位置的粘贴数据就不会被粘贴而只粘贴显示列的数据,这样就会失去被隐藏了的那些列的数据,请问大家有没方法,当粘贴时可以正常地将相关列的数据按次序粘到当前表的显示列中呢?


 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1028 积分:7211 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/6/26 20:45:00 [显示全部帖子]

好像比较难,能否给个例子呢?

 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1028 积分:7211 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/6/27 13:39:00 [显示全部帖子]

还是搞不好啊!


 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1028 积分:7211 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/6/27 21:38:00 [显示全部帖子]

我的意思是想在粘贴时能跳过已隐藏的列,就是隐藏了的列是不能被粘贴到数据的,仅仅粘贴到这个用户能看到的列,且在粘贴时EXCEL是三列数那么foxtable表中也是对应的三列数。

 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1028 积分:7211 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/6/27 22:42:00 [显示全部帖子]

以下是引用mr725在2010-6-27 22:17:00的发言:

或许,你可以把隐藏的列移到最后一列的位置.........

 


[此贴子已经被作者于2010-6-27 22:20:04编辑过]

我也试过想将隐藏了的列统一移到显示列的后面,但这一样一来,当有别的用户进来的时候,而他有权看到一些别人看不到的列,那么这个用户的列顺序就变了。所以希望有一个好一点的方法实现这个想法,我想大家在做数据管理的时候是需要能快速地将EXECL表中的一些数据粘贴到系统中的。


 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1028 积分:7211 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/6/29 18:05:00 [显示全部帖子]

以下是引用mr725在2010-6-28 12:48:00的发言:

您的代码我测试后,直接的结果是17楼的第一个图,经过撤销和反撤销(即恢复)后,就得到第二个图。。。。。

所以,在你代码后面加上:

Syscmd.Edit.Undo()
Syscmd.Edit.Redo()
for d as integer = 0 to currenttable.count-1
    currenttable(d,0) = currenttable(d,0).trim(" ")
next

后,才能得到正确的结果: 


此主题相关图片如下:未命名0.jpg
按此在新窗口浏览图片

上面的 for......next 是从第一列开始粘贴的,要从任何单元格开始粘贴就要改为:

For c1 As Integer = t.toprow to t.Cols.Count - 1       ‘或t.bottomrow -1
    currenttable(c1,t.LeftCol ) = currenttable(c1,t.LeftCol ).trim(" ")
next

[此贴子已经被作者于2010-6-28 12:58:17编辑过]

经测试这个也有问题!


 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1028 积分:7211 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/6/29 21:34:00 [显示全部帖子]

以下是引用狐狸爸爸在2010-6-29 19:17:00的发言:

改一下:

 

Dim t As Table = CurrentTable
Dim s As String = System.Windows.Forms.ClipBoard.GetText()
Dim Lines() As String = s.split(chr(13))
Dim Count As Integer = Math.Min(Lines.Length,t.Rows.Count - t.TopPosition) - 1
For n As Integer = 0 To Count
    Dim Line() As String = Lines(n).Trim(chr(10)).Split(chr(9))
    Dim r As Integer = t.TopPosition + n
    Dim vp As Integer = 0
    For c As Integer = t.LeftCol to t.Cols.Count - 1
        If vp < Line.Length  Then
            t.Rows(r)(c) = Line(vp)
        End If
        vp = vp + 1
    Next
Next

 

 

这个是含隐藏列的,请问排除隐藏列的有如何呢?


 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1028 积分:7211 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/6/29 21:48:00 [显示全部帖子]

以下是排除隐藏列的:

Dim t As Table = CurrentTable
Dim s As String = System.Windows.Forms.ClipBoard.GetText()
Dim Lines() As String = s.split(chr(13))
Dim Count As Integer = Math.Min(Lines.Length,t.Rows.Count - t.TopPosition) - 1
For n As Integer = 0 To Count
    Dim Line() As String = Lines(n).Trim(chr(10)).Split(chr(9))
    Dim r As Integer = t.TopPosition + n
    Dim vp As Integer = 0
    For c As Integer = t.LeftCol to t.Cols.Count - 1
    If t.Cols(c).Visible Then
        If vp < Line.Length  Then
            t.Rows(r)(c) = Line(vp)
        End If
        vp = vp + 1
    end if
Next
Next


 回到顶部