以文本方式查看主题

-  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=144827)

--  作者:lds
--  发布时间:2019/12/31
--  [求助]窗口按钮跨表多列转行提取数据
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:多列转行.table

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

--  作者:有点蓝
--  发布时间: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
--  发布时间: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

--  作者:有点蓝
--  发布时间: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
--  发布时间:2019/12/31 10:23:00
--  
收到,谢谢指教!