以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  垂直表和水平表转换  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=84836)

--  作者:jamhuton
--  发布时间:2016/5/11 16:17:00
--  垂直表和水平表转换
2个表的列和行互相调换
--  作者:jamhuton
--  发布时间:2016/5/11 16:17:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

--  作者:jamhuton
--  发布时间:2016/5/11 16:18:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看

--  作者:jamhuton
--  发布时间:2016/5/11 16:23:00
--  
上面的表转换成下面的表,
例子我看了半天没搞明白,这个和例子有些不同


--  作者:大红袍
--  发布时间:2016/5/11 17:01:00
--  
Dim dtb As New DataTableBuilder("表E")
dtb.AddDef("项目", Gettype(String), 32)
For Each v As String In DataTables("表C").GetValues("第一列", "", "_Sortkey")
    dtb.AddDef(v, Gettype(String))
Next
dtb.Build()
For Each dc As DataCol In DataTables("表C").datacols
    Dim dr1 As DataRow = DataTables("表E").AddNew()
    dr1("项目") = dc.name
Next
MainTable = Tables("表E")

--  作者:jamhuton
--  发布时间:2016/5/12 10:25:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:3.png
图片点击可在新窗口打开查看

3个问题:
1、这个月份这个一行怎么删除
2、转换后数据没出现
3、这个转换后是一个临时表,如果我要数据表,应该如何改代码?

--  作者:大红袍
--  发布时间:2016/5/12 10:36:00
--  

1、2

 

Dim dtb As New DataTableBuilder("表E")
dtb.AddDef("项目", Gettype(String), 32)
For Each v As String In DataTables("表C").GetValues("第一列", "", "_Sortkey")
    dtb.AddDef(v, Gettype(String))
Next
dtb.Build()

For Each dc As DataCol In DataTables("表C").datacols
    If dc.name <> "第一列" Then
        Dim dr1 As DataRow = DataTables("表E").AddNew()
        dr1("项目") = dc.name
        For Each dr As DataRow In DataTables("表C").datarows
            dr1(dr("第一列")) = dr(dc.name)
        Next
    End If
Next

MainTable = Tables("表E")

 

3、你把临时表导出,然后导入即可。


--  作者:大红袍
--  发布时间:2016/5/12 10:47:00
--  

3、

 

Dim Builder As New ADOXBuilder
Builder.Open()

If DataTables.Contains("表E") Then
    If DataTables("表E").Type <> 5 Then
        With Builder
            .DeleteTable("表E")
        End With
    End If
    DataTables.unload("表E")
End If

Dim tbl = Builder.NewTable("表E") \'创建表
tbl.AddColumn("项目" ,ADOXType.String, 32)
For Each v As String In DataTables("表C").GetValues("第一列", "", "_Sortkey")
    tbl.AddColumn("a" & v,ADOXType.String)
Next
Builder.AddTable(tbl) \'增加表
Builder.Close()

DataTables.load("表E")
For Each dc As DataCol In DataTables("表C").datacols
    If dc.name <> "第一列" Then
        Dim dr1 As DataRow = DataTables("表E").AddNew()
        dr1("项目") = dc.name
        For Each dr As DataRow In DataTables("表C").datarows
            dr1("a" & dr("第一列")) = dr(dc.name)
        Next
    End If
Next

MainTable = Tables("表E")


--  作者:jamhuton
--  发布时间:2016/5/12 10:48:00
--  
谢谢老师
--  作者:jamhuton
--  发布时间:2016/5/12 11:26:00
--  
老师我想在后面加一个合计列,因为这里的数据列不断在增加的,这个合计咱就弄不来了