以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  如何查出日期列中缺少的日期  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=128202)

--  作者:ZJZK2018
--  发布时间:2018/11/30 20:11:00
--  如何查出日期列中缺少的日期
一个监理日记表中有个日期列,应该是不能间断的,如何查出日期列中缺少的日期,如果开始日期为2018-05-20,到今天为止如2018-11-30,其中缺少日期提取出来?


--  作者:有点蓝
--  发布时间:2018/11/30 20:41:00
--  
按日期排序,然后循环每一行判断。比如第一行日期等于【某个日期】,那么第二行的日期应该就等于【某个日期+1】,以此类推。
--  作者:ZJZK2018
--  发布时间:2018/11/30 22:41:00
--  
下面代码虽已达到效果,但感觉代码有点复杂,能否帮我优化一下

Dim lst As new List(of Date)
Dim st As String
For Each dt As Row In Tables("表A").Rows
    If lst.Contains(dt("施工日期")) = False Then
        lst.Add(dt("施工日期"))
    End If
Next
lst.Sort()
Dim t As TimeSpan = lst(lst.Count -1) - lst(0)
For i As Integer = 0 To t.TotalDays
    Dim tt As Date = lst(0).AddDays(i)
    If lst.Contains(tt) = False Then
        st = st & vbcrlf & tt
    End If
Next
e.Form.Controls("Label1").text = st


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


--  作者:有点蓝
--  发布时间:2018/11/30 23:13:00
--  
Tables("表A").Sort = "施工日期"

Dim d As Date = Tables("表A").Rows(0)("施工日期")
Dim st As String
For i As Integer = 1 To Tables("表A").Rows.Count - 1
    Dim r As Row = Tables("表A").Rows(i)
    d = d.AddDays(1)
    If d < r("施工日期") Then
        Do While d < r("施工日期")
            st = st & vbcrlf & d
            d = d.AddDays(1)
        Loop
    End If
Next
e.Form.Controls("Label1").text = st