以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助] 有更好的删除表所有空行的方法吗? (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=153198) |
-- 作者:龙潭春早 -- 发布时间:2020/8/3 20:28:00 -- [求助] 有更好的删除表所有空行的方法吗? 一、想删除表的所有空行 下面代码执行结果的“删除前总行数 i ”,怎么会和“有数据的行数 i4”一样呢? 不应该吧? 二、有更好的删除表所有空行的方法吗? 三、代码 1、下面代码的执行结果: 总是 i = i4 删除前总行数 i = 103 删除的空行数 i3 = 50 有数据的行数 i4 = 103 总列数 = 10 删除后总行数 = 53 2、代码 MainTable = Tables("表C") Dim i,i2,i3,i4 As Integer Dim t As Table = Tables("表C") t.StopReDraw For i = 0 To t.Rows.Count - 1 i2 = 0 For Each c As Col In t.Cols If t.Rows(i).IsNull(c) Then i2 = i2 + 1 \' 累计为空的列数 Else Exit For \' 遇到第一个不为空的列,则退出循环\' End If Next If i2 = t.Cols.Count Then \' 累计为空的列数 = 列集合数,则删除该行 t.Rows(i).Delete() i3 = i3 + 1 \' 累计删除的空行数 i = i - 1 \' 为了再次循环时,保持当前的行号 Else i4 = i4 + 1 \' 累计不为空( 有数据 ) 的行数 End If Next t.ResumeRedraw output.show("删除前总行数 i = " & i) output.show("删除的空行数 i3 = " & i3) output.show("有数据的行数 i4 = " & i4) output.show("总列数 = " & t.Cols.Count ) output.show("删除后总行数 = " & t.Rows.Count )
|
-- 作者:有点蓝 -- 发布时间:2020/8/3 20:43:00 -- 删除行要倒序删除 MainTable = Tables("表C") Dim i,i2,i3,i4,cnt As Integer Dim t As Table = Tables("表C") cnt = t.Rows.Count t.StopReDraw For i = t.Rows.Count - 1 To 0 Step -1 i2 = 0 For Each c As Col In t.Cols If t.Rows(i).IsNull(c) Then i2 = i2 + 1 \' 累计为空的列数 Else Exit For \' 遇到第一个不为空的列,则退出循环\' End If Next If i2 = t.Cols.Count Then \' 累计为空的列数 = 列集合数,则删除该行 t.Rows(i).Delete() i3 = i3 + 1 \' 累计删除的空行数 Else i4 = i4 + 1 \' 累计不为空( 有数据 ) 的行数 End If Next t.ResumeRedraw output.show("删除前总行数 i = " & cnt) output.show("删除的空行数 i3 = " & i3) output.show("有数据的行数 i4 = " & i4) output.show("总列数 = " & t.Cols.Count ) output.show("删除后总行数 = " & t.Rows.Count ) |
-- 作者:龙潭春早 -- 发布时间:2020/8/7 15:14:00 -- 嗯 看样子,是没有更好的删除表所有空行的方法了,只能是通过行、列的遍历来判断了。 [此贴子已经被作者于2020/8/7 15:17:15编辑过]
|
-- 作者:y2287958 -- 发布时间:2020/8/7 15:37:00 -- 加个表达式列的辅助列,然后用DeleteFor删除 |
-- 作者:龙潭春早 -- 发布时间:2020/8/7 16:50:00 -- 请教大神,具体要怎么操作呢? [此贴子已经被作者于2020/8/7 16:49:51编辑过]
|
-- 作者:y2287958 -- 发布时间:2020/8/7 16:56:00 -- Dim lst As new List(of String) For Each dc As DataCol In DataTables("表B").DataCols lst.Add("isnull(" & dc.Name & ",1)") Next Dim 表达式 As String = String.join("+",lst.ToArray) If DataTables("表B").DataCols.Contains("aa") DataTables("表B").DataCols("aa").Expression = 表达式 Else DataTables("表B").DataCols.Add("aa",Gettype(Integer),表达式) End If DataTables("表B").DeleteFor("aa=" & DataTables("表B").DataCols.Count-1) |
-- 作者:龙潭春早 -- 发布时间:2020/8/7 18:12:00 -- 嗯 研究一下 多谢! |