以文本方式查看主题

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

--  作者:实话实说
--  发布时间:2010/11/20 15:08:00
--  表的转换

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

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


--  作者:mr725
--  发布时间: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

--  作者:实话实说
--  发布时间:2010/12/2 11:24:00
--  

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


--  作者:czy
--  发布时间:2010/12/2 11:49:00
--  
怎么区分新加的数据?是型号不同吗?
--  作者:czy
--  发布时间:2010/12/2 16:08:00
--  

用这种办法行不行?

 

 

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


--  作者:czy
--  发布时间: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编辑过]

--  作者:实话实说
--  发布时间:2010/12/3 9:14:00
--  
谢谢CZY,测试通过