Foxtable(狐表)用户栏目专家坐堂 → 请教:如何根据列名称或列内容自动获得最大列宽?


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

主题:请教:如何根据列名称或列内容自动获得最大列宽?

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/3/15 13:35:00 [显示全部帖子]

MaxLength

如果是字符列,返回该列允许输入的最大长度,否则返回-1。

例如:

Dim Len As Integer
Len =
DataTables("订单").DataCols("产品").
MaxLength
Output.Show(Len)


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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/3/15 13:50:00 [显示全部帖子]

Dim Len As Integer
with currenttable
    For Each c As Col In CurrentTable.Cols
        len = datatables(currenttable.name).datacols(c.name).maxlength
        Output.Show(c.Index & "  " & c.name & "    " & len )
    next
end with

这个就是列设置时的允许最大的字符数啊。列宽用Width取得吧。

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/3/15 14:21:00 [显示全部帖子]

这样都有了::::

Dim Len As Integer
Dim n As Integer
Dim s as string
with currenttable
    For Each c As Col In CurrentTable.Cols
        len = datatables(currenttable.name).datacols(c.name).maxlength
        s = currenttable.Cols(n).Width
        Output.Show(c.Index & "  " & c.name & "    " & len & "  => " & s)  
                    '''   列序号              列名              列设置的字符长    列宽度)
        n = n + 1
    next
end with
[此贴子已经被作者于2010-3-15 14:21:24编辑过]

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/3/15 14:44:00 [显示全部帖子]

这个更全啦:  如果都是字符型的列:
Dim Len As Integer
Dim n As Integer
Dim n0 As Integer
Dim s as string
with currenttable
    For Each c As Col In CurrentTable.Cols
        len = datatables(currenttable.name).datacols(c.name).maxlength
        s = currenttable.Cols(n).Width
        for i as integer = 0 to currenttable.count -1
            if currenttable.rows(i)(c.name).length > n0
                n0 = currenttable.rows(i)(c.name).length
            end if
        next
        Output.Show("【列位置: 】" & c.Index & " 【列名:】  " & _
        c.name & " 【列设置的字符长度:】  " & len & "  【列宽:】 " & _
        s & " 【本列已输入的最大字符长:】 " & n0)
        n = n + 1
    next
end with

[此贴子已经被作者于2010-3-15 14:51:40编辑过]

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/3/15 16:30:00 [显示全部帖子]

这样不管是什么列类型:

Dim Len,n As Integer
Dim s as string
with currenttable
    For Each c As Col In CurrentTable.Cols
            len = datatables(currenttable.name).datacols(c.name).maxlength
            s = currenttable.Cols(n).Width
            Dim s1 as string = 0
            dim nn as string
            for i as integer = 0 to currenttable.count -1
                nn = "" & currenttable.rows(i)(c.name) & ""
                if s1 < nn.length
                    s1 = nn.length
                end if
            next
            Output.Show("【列位置: 】" & c.Index & " 【列名:】  " & _
            c.name & " 【列设置的字符长度:】  " & len & "  【列宽:】 " & _
            s & " 【本列已输入的最大字符长:】 " & s1)            
        n = n + 1
    next
end with

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/3/15 17:29:00 [显示全部帖子]

如果是备注型的列,就s1输入内容多的话,就惨了。呵呵~  

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/3/15 17:36:00 [显示全部帖子]

网络问题,重复了~ 

[此贴子已经被作者于2010-3-15 17:36:37编辑过]

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/3/16 20:17:00 [显示全部帖子]

以下是引用czy在2010-3-15 17:29:00的发言:
要不用模拟按键试试系统的最佳列宽

这个怎么搞呢~ 

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/3/17 12:44:00 [显示全部帖子]

这个最好,谢谢C版···     学啊~ 

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/3/17 22:08:00 [显示全部帖子]

以下是引用czy在2010-3-17 12:03:00的发言:
With CurrentTable
    .Select(0,0,0,.Cols.Count-1)
End With
Sendkeys.Send("{Tab 3}~")
RibbonTabs("Common").Groups("Data").Items("Other").Items("SetColumnWidth").PerformClick()

测试了一下,代码虽然简单,但是速度有些不足: 40列,11000行数据表要10秒钟时间~ (中等偏下配置的电脑)

不如自己用lxl版主的代码求得字节数遍历列来的速度快呀(1秒半不到)~  (但从字节数换算成列宽时,要随不同字体和字体的大小不同来确定一个系数,得出合适的列宽来,否则很难做到『最佳列宽』,琢磨中·····)

需要狐爸来提速啦~~~~~


 回到顶部
总数 12 1 2 下一页