Foxtable(狐表)用户栏目专家坐堂 → 表的转换


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

主题:表的转换

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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19390 威望:0 精华:1 注册:2008/9/12 9:19:00
表的转换  发帖心情 Post By:2010/11/20 15:08:00 [只看该作者]

我想将EXCEL表转换成表B的样式,请高手指点

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目3.table


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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/11/20 20:13:00 [只看该作者]

'''
Dim dtb As New DataTableBuilder("Excel转置")
dtb.AddDef("型号", Gettype(String),15)
dtb.AddDef("规格", Gettype(String),15)
dtb.AddDef("材料", Gettype(String))
dtb.AddDef("用量", Gettype(Double))
dtb.Build()
MainTable= Tables("Excel转置")
For i As Integer = 0 To Tables("EXCEL表").count -1
    If Tables("EXCEL表").rows(i)("型号") > ""   '用IsNull好些
        For ii As Integer = 2 To Tables("EXCEL表").cols.count -1
            Dim lm As String = Tables("EXCEL表").cols(ii).name
            If Tables("EXCEL表").rows(i).IsNull(lm) = False
                Tables("EXCEL转置").addnew
                Dim r As Row = Tables("EXCEL转置").current
                r("型号") = Tables("EXCEL表").rows(i)("型号")
                r("规格") = Tables("EXCEL表").rows(i)("规格")
                r("材料") = lm
                r("用量") = Tables("EXCEL表").rows(i)(lm)
            End If
        Next
    End If
Next

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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19390 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2010/12/2 11:24:00 [只看该作者]

谢谢mr725,代码可用。现在想改进一下,因为数据量大,每次转换时只转换新加入的数据,已有的数据不变。


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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33957 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2010/12/2 11:49:00 [只看该作者]

怎么区分新加的数据?是型号不同吗?

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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33957 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2010/12/2 16:08:00 [只看该作者]

用这种办法行不行?

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目19.table


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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33957 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2010/12/2 16:12:00 [只看该作者]

如果每次转换的数据量大,将窗口按钮代码改成这样好一点。

 

Dim drs As List(Of DataRow) = DataTables("EXCEL表").Select("[型号] Is Not Null And [sys_标记] = False")
If drs.Count = 0 Then
    MessageBox.Show("没有新数据!")
    Return
Else
    Tables("窗口1_Table1").StopRedraw
    For Each dr As DataRow In drs
        For Each dc As DataCol In DataTables("EXCEL表").DataCols
            Select Case dc.Name
                Case "型号","规格","sys_标记"
                Case Else
                    If dr.IsNull(dc.Name) = False Then
                        Dim r As Row = Tables("表B").Addnew
                        r("型号") = dr("型号")
                        r("规格") = dr("规格")
                        r("材料") = dc.Name
                        r("用量") = dr(dc.Name)
                    End If
            End Select
        Next
        dr("sys_标记") = True
    Next
    Tables("窗口1_Table1").ResumeRedraw
End If

[此贴子已经被作者于2010-12-2 16:14:26编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19390 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2010/12/3 9:14:00 [只看该作者]

谢谢CZY,测试通过

 回到顶部