Foxtable(狐表)用户栏目专家坐堂 → [求助]窗口按钮跨表多列转行提取数据


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

主题:[求助]窗口按钮跨表多列转行提取数据

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


加好友 发短信
等级:幼狐 帖子:109 积分:1729 威望:0 精华:0 注册:2019/10/21 21:57:00
[求助]窗口按钮跨表多列转行提取数据  发帖心情 Post By:2019/12/31 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:多列转行.table

在学习中遇到了困难,窗口按钮多
图片点击可在新窗口打开查看此主题相关图片如下:列转行.png
图片点击可在新窗口打开查看
列转行,根据商品信息表中多列门店中有数量的行,将该列的列名取后两位到分货单店名列,填充对应门店行的供应商,商品代码及数量信息。

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


加好友 发短信
等级:幼狐 帖子:109 积分:1729 威望:0 精华:0 注册:2019/10/21 21:57:00
  发帖心情 Post By:2019/12/31 9:02:00 [只看该作者]

Dim dtb As New DataTableBuilder("分货单1")
dtb.AddDef("供应商代码", Gettype(String), 6)
dtb.AddDef("商品代码", Gettype(String), 10)
dtb.AddDef("店名", Gettype(String), 10)
dtb.AddDef("数量", Gettype(String), 10)
dtb.Build()
Dim kms() As String = {"百一","白河","建设","长江","卧龙"}
For Each dr1 As DataRow In DataTables("商品信息").DataRows
    For Each km As String In kms
        Dim dr2 As DataRow = DataTables("分货单1").AddNew()
        dr2("供应商代码") = dr1("供应商代码")
        dr2("商品代码") = dr1("商品代码")
        dr2("店名") = km
        dr2("数量") = dr1(km)
    Next
Next
MainTable = Tables("分货单1")

这是根据帮助文档改的,大概效果是这样,但这是生成的临时表,希望长久保存在分货单表,还有如何让生成的店名用数字代替。如:百一 = 0001  ,白河=0006,建设=0007 
图片点击可在新窗口打开查看此主题相关图片如下:列转行.jpg
图片点击可在新窗口打开查看

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


加好友 发短信
等级:超级版主 帖子:106028 积分:539233 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/12/31 9:08:00 [只看该作者]

For Each adr As DataRow In DataTables("商品信息").Select("商品代码 is not null")
    For Each adc As DataCol In DataTables("商品信息").DataCols
        If adc.Name.StartsWith("门店") AndAlso adr.IsNull(adc.Name) = False Then
            Dim dm As String = adc.Name.split("_")(1)
            Dim bdr As DataRow = DataTables("分货单").Find("商品代码='" & adr("商品代码") & "' And 店名='" & dm & "'")
            If bdr Is Nothing Then
                bdr = DataTables("分货单").AddNew()
                bdr("店名") = dm
                bdr("供应商") = adr("供应商代码")
                bdr("商品代码") = adr("商品代码")
            End If
            bdr("数量") = adr(adc.Name)
            
        End If
    Next
Next

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


加好友 发短信
等级:幼狐 帖子:109 积分:1729 威望:0 精华:0 注册:2019/10/21 21:57:00
  发帖心情 Post By:2019/12/31 10:04:00 [只看该作者]

谢谢蓝版帮助!如果我的表不是多行表头,把 ”门店-“去掉  门店-百一 改成百一,门店-建设改成 建设   变成单行表头要怎么取各门店列名

For Each adr As DataRow In DataTables("商品信息").Select("商品代码 is not null")
    For Each adc As DataCol In DataTables("商品信息").DataCols
        If adc.Name.StartsWith("门店") AndAlso adr.IsNull(adc.Name) = False Then
            Dim dm As String = adc.Name.split("_")(1)
            Dim bdr As DataRow = DataTables("分货单").Find("商品代码='" & adr("商品代码") & "' And 店名='" & dm & "'")
            If bdr Is Nothing Then
                bdr = DataTables("分货单").AddNew()
                bdr("店名") = dm
                bdr("供应商") = adr("供应商代码")
                bdr("商品代码") = adr("商品代码")
            End If
            bdr("数量") = adr(adc.Name)
            
        End If
    Next
Next

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


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

建议保留多层表头,比较方便判断
        If adc.Name <> "商品代码" andalso adc.Name <> "商品名称andalso adc.Name <> xxxx列 and ...... Then
            Dim dm As String = adc.Name

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


加好友 发短信
等级:幼狐 帖子:109 积分:1729 威望:0 精华:0 注册:2019/10/21 21:57:00
  发帖心情 Post By:2019/12/31 10:23:00 [只看该作者]

收到,谢谢指教!

 回到顶部