以文本方式查看主题

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

--  作者:miaoqingqing
--  发布时间:2022/12/6 0:20:00
--  [求助]多值列拆分成单行失败
第一列多值列是空格换行时拆分多值为多行失败,
求助:多值列拆分成单行(已存在的就不新建,避免重复)

    For Each s As String In e.DataRow("第一列").split(" & Chr(13) & Chr(10) & ")  空格换行这个代码无效

狐表不能升级了,新版本打不开,辛苦蓝总把代码贴出来

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:多值列拆分成单行 -2.table


[此贴子已经被作者于2022/12/6 8:48:22编辑过]

--  作者:有点蓝
--  发布时间:2022/12/6 8:38:00
--  
最终要什么效果
--  作者:miaoqingqing
--  发布时间:2022/12/6 8:51:00
--  回复:(有点蓝)最终要什么效果
第一列的第一行的1个单元格里多值:
2134
2134
2314
2341

拆到表:多值列拆分成单行 里新建3行,第二列新建的这3行的3个单元格里分别录入
2134(已存在就不重复新建)
2314
2341

蓝总,理解上面我表达的效果没?



[此贴子已经被作者于2022/12/6 9:47:19编辑过]

--  作者:有点蓝
--  发布时间:2022/12/6 9:50:00
--  
If e.DataCol.name="第一列"  AndAlso e.DataRow.isnull("第一列")=False Then
    For Each s As String In e.DataRow("第一列").Replace(vbcr, "").split(vblf)
        
        Dim dr As DataRow
        dr = DataTables("多值列拆分成单行").Find("第二列 = \'" & s & "\'")
        If dr Is Nothing Then \'如果找到了同名的产品行,也就是dr不是Nothing
            Dim r As Row = Tables("多值列拆分成单行").addnew
            r("第二列")= s
        End If
    Next
End If

--  作者:miaoqingqing
--  发布时间:2022/12/7 14:50:00
--  回复:(有点蓝)If e.DataCol.name="第一列"  A...
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:第一列多值单元格拆分失败求助.table


蓝总,上楼代码在项目中拆分数量太少不对,辛苦帮忙代码贴出来,高版本项目打不开

--  作者:有点蓝
--  发布时间:2022/12/7 15:06:00
--  
什么数据不对?
--  作者:miaoqingqing
--  发布时间:2022/12/7 15:12:00
--  回复:(有点蓝)什么数据不对?
表A第一列1295行的多值拆分到表: 多值列拆分成单行的第二列  也是1295行(数据感觉少了)

[此贴子已经被作者于2022/12/7 15:14:50编辑过]

--  作者:有点蓝
--  发布时间:2022/12/7 15:13:00
--  
哪个数据少了?我没有这个闲工夫一个个去核对
--  作者:y2287958
--  发布时间:2022/12/7 16:51:00
--  
没错,1295只是巧合而已,可以增删一些数据试试。
不过我更喜欢用以下代码
Dim lst As New List(Of String)
For Each dr As DataRow In DataTables("表A").Datarows
    lst.AddRange(dr.Lines("第一列"))
Next
\'Output.Show (lst.Distinct.Count)
DataTables("多值列拆分成单行").DataRows.Clear
DataTables("多值列拆分成单行").StopRedraw
For Each s As String In lst.Distinct
    Dim dr As DataRow = DataTables("多值列拆分成单行").AddNew
    dr("第二列") = s
Next
DataTables("多值列拆分成单行").ResumeRedraw

--  作者:miaoqingqing
--  发布时间:2022/12/7 18:49:00
--  回复:(y2287958)没错,1295只是巧合而已,可以增删...
收到,感谢各位老师前辈