以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]求一段行转列的代码,急需啊!  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=48835)

--  作者:home8225
--  发布时间:2014/4/7 0:12:00
--  [求助]求一段行转列的代码,急需啊!
公司本来是要上软件的,我在找软件商的时候看到了狐表这个软件就试着弄起来一套平时记录工作的表格,已经用上了!
现在需要将工序转成一列,不同产品因为工序不一样,15道工序不一定填满,预留15道工序。
论坛里的行转列的例子我都看过了,刚好跟我要的结果反一下,代码正在研究中,可是工作上急需这个,求各位大大帮忙给段代码!非常感谢!!!


订单号   路线卡代号       工序1  工序2  工序3  工序4  工序5 工序6  工序7 工序8 工序9 工序10 工序11 工序12 工序13 工序14 工序15
007      007-XDF-01    A        B         C       D
007      007-XDF-02    O        P         Q       X       Y        Z

订单号   路线卡代号       工序
007     007-XDF-01     A
007     007-XDF-01     B
007     007-XDF-01     C
007     007-XDF-01     D
007     007-XDF-02
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:行转列.table

  

--  作者:lsy
--  发布时间:2014/4/7 8:13:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:行列转置.table


--  作者:home8225
--  发布时间:2014/4/7 8:56:00
--  
卧槽太牛逼了!!!图片点击可在新窗口打开查看万分感谢!
--  作者:home8225
--  发布时间:2014/4/7 17:05:00
--  
版主再请教一下,现在有两个总表,一个装置总表,一个金工总表,我想把两个表中的工序都导到一个路线卡明细表中。
我把你写的第一条clear()命令删了,这样两张表导的时候不会覆盖。然后想增加一个选中行的限制,只有选中的行才会执行命令。
试过.TopPosition To .BottomPosition,还有GetCheckedRows但是怎么都不成。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:行列转置2.0.table

谢谢谢谢谢谢谢谢!

--  作者:有点甜
--  发布时间:2014/4/7 17:28:00
--  

代码

 

For i As Integer = Tables("金工总表").TopPosition To Tables("金工总表").BottomPosition
    Dim adr As Row  = Tables("金工总表").Rows(i)
    If adr.IsNull("路线卡代号") = False Then
        For Each adc As DataCol In DataTables("金工总表").DataCols
            If adc.Name.StartsWith("工序") AndAlso adr.IsNull(adc.Name) = False Then
                Dim bdr As DataRow = DataTables("路线卡明细").AddNew()
                bdr("序号") = adr("序号")
                bdr("订单号") = adr("订单号")
                bdr("路线卡代号") = adr("路线卡代号")
                bdr("工序") = adr(adc.Name)
            End If
        Next
    End If
Next
DataTables("路线卡明细").Save()
MainTable = Tables("路线卡明细")


--  作者:lsy
--  发布时间:2014/4/7 17:42:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:行列转置2.0.table


--  作者:home8225
--  发布时间:2014/4/7 19:05:00
--  
谢谢谢谢谢谢图片点击可在新窗口打开查看
--  作者:home8225
--  发布时间:2014/4/11 10:10:00
--  
你好,谢谢你的代码。
如果我想加一段代码,防止重复转置,该怎么写啊??
if bdr(路线卡代号)存在与adr(路线卡代号)相同项,则取消更改。

--  作者:Bin
--  发布时间:2014/4/11 10:15:00
--  
看了一下,不影响吧.也没重叠,也没有累加.  生成了还是原样,保持现在这样最好了.太多判断降低效率. 只判断一行有可能其他行有变,要判断就要全部判断.
--  作者:有点甜
--  发布时间:2014/4/11 10:20:00
--  

 是不是这个意思?

 

For i As Integer = Tables("金工总表").TopPosition To Tables("金工总表").BottomPosition
    Dim adr As Row  = Tables("金工总表").Rows(i)
    If adr.IsNull("路线卡代号") = False Then
        Dim fdr As DataRow = DataTables("路线卡明细").Find("路线卡代号 = \'" & adr("路线卡代号") & "\'")
        If fdr Is Nothing Then
            For Each adc As DataCol In DataTables("金工总表").DataCols
                If adc.Name.StartsWith("工序") AndAlso adr.IsNull(adc.Name) = False Then
                    Dim bdr As DataRow = DataTables("路线卡明细").AddNew()
                    bdr("序号") = adr("序号")
                    bdr("订单号") = adr("订单号")
                    bdr("路线卡代号") = adr("路线卡代号")
                    bdr("工序") = adr(adc.Name)
                End If
            End If
        Next
    End If
Next
DataTables("路线卡明细").Save()
MainTable = Tables("路线卡明细")