Foxtable(狐表)用户栏目专家坐堂 → [求助]增加临时列ABCDE甚至到AA及ZZ


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

主题:[求助]增加临时列ABCDE甚至到AA及ZZ

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


加好友 发短信
等级:九尾狐 帖子:2204 积分:18140 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2022/6/16 10:23:00 [只看该作者]

Dim dtb As New DataTableBuilder("CS")

For i As Integer = 1 To 100
    Dim x As String = ""
    Select i
        Case 1
            x = "A"
        Case 2
            x = "B"
        Case 3
            x = "C"
        Case 4  ‘如果要增加100列,不可能这么来啊’
    End Select 
    dtb.AddDef(x, GetType(String), 64)
Next 

dtb.Build()
MainTable = Tables("CS")

也就是10进制转26进制,把123456转为ABCDEF


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


加好友 发短信
等级:九尾狐 帖子:2204 积分:18140 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2022/6/16 10:25:00 [只看该作者]

VBA是这么干的

Public Function Num10toN(ByVal Num As Long, Optional ByVal N As Long = 16, Optional ByVal AddNum As Long = 0) As String
Dim I As Long, J As Long, K As Long



If N < 2 Or N > 36 Then Exit Function
If N + AddNum > 36 Then Exit Function


If Num = 0 Then
Num10toN = "0"
Exit Function

End If

Static FirstRun As Boolean
Static NumChar(0 To 35) As String * 1

If FirstRun = False Then
For I = 0 To 9
NumChar(I) = CStr(I)
Next I
For I = 0 To 25
NumChar(I + 10) = Chr(Asc("A") + I)
Next I

FirstRun = True

End If

Dim TempNum As Long
Dim TempStr As String

TempNum = Num And &H7FFFFFFF '不考虑符号位

TempStr = Space(Log(Num) / Log(N) + 1)

I = Len(TempStr)
Do While TempNum > 0
J = TempNum Mod N
Mid(TempStr, I, 1) = NumChar(J + AddNum)
I = I - 1
TempNum = (TempNum - J) \ N

Loop

I = I + 1
If N = 26 And AddNum = 10 And Num >= 26 Then Mid(TempStr, I) = Chr(Asc(Mid(TempStr, I)) - 1)

Num10toN = Mid(TempStr, I)

End Function

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


加好友 发短信
等级:超级版主 帖子:107440 积分:546479 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/6/16 10:25:00 [只看该作者]

意思是表格的格式不是固定的,可能标题行在第一行,也有可能在第三行等,可能还有合并单元格什么的?这种没有办法判断。

如果标题行是固定的几行,比如就是第1~3行是标题行,那么这种还好办。至于列数是次要,遍历过去就行

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


加好友 发短信
等级:超级版主 帖子:107440 积分:546479 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/6/16 10:30:00 [只看该作者]

abc这些字母和数字对应很简单啊,用数组即可

dim sr() as string = {"a","b","c",...}

如果要使用编码转换,数字97~122就是小写字母
For i As Integer = 97 To 122
    Output.Show(Chr(i))
Next 

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


加好友 发短信
等级:九尾狐 帖子:2204 积分:18140 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2022/6/16 10:35:00 [只看该作者]

所以,才说要做一个临时表,比如增加5列,就是ABCDE;增加26列,就是A-Z;增加27列,就是A-AA

其它的都好处理。

dim sr() as string = {"A","B","D",...},用它也是一个办法,如果有100列,那不得整晕过去

那个笑话,画一行就是一,画两行是二,画三行是三,要是这个人姓万,那咋整……图片点击可在新窗口打开查看
[此贴子已经被作者于2022/6/16 10:36:21编辑过]

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


加好友 发短信
等级:超级版主 帖子:107440 积分:546479 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/6/16 11:15:00 [只看该作者]

使用2个数组不就行了

Dim sr() As String = {"", "A", "B", "C", "D"}
Dim sr2() As String = {"A", "B", "C", "D"}
Dim i1 As Integer = 0
Dim i2 As Integer = 0
Dim c As Integer = 15 '列数
For i As Integer = 0 To c
    If i2 >= sr2.Length Then
        i2 = 0
        i1 = i1 + 1
    End If
    Output.Show(sr(i1) & sr2(i2)) '生成列名
    i2 = i2 + 1
Next 

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


加好友 发短信
等级:九尾狐 帖子:2204 积分:18140 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2022/6/16 11:26:00 [只看该作者]

Dim n As Integer = Args(0)  '列序号

Dim outinfo As String = ""

Do While n > 0
    Dim m As Integer = n Mod 26 '得到余数
    If m = 0 Then
        m = 26
    End If 
    
    outinfo = chr(m + 64) & outinfo
    n = (n - m) / 26
Loop

Return outinfo

 回到顶部
总数 17 上一页 1 2