以文本方式查看主题

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

--  作者:SMXTB
--  发布时间:2015/10/13 17:34:00
--  求助一个模板,生在统计表
制作了一个出差登记表,现在想从表中取数输出统计报表,不知道如何设置这个模板。表的结构是这样:
图片点击可在新窗口打开查看此主题相关图片如下:qq图片001.png
图片点击可在新窗口打开查看
想要得到这样一个报表:
图片点击可在新窗口打开查看此主题相关图片如下:qq截图20180419151813.jpg
图片点击可在新窗口打开查看

请哪位大师指点一下好吗,
[此贴子已经被作者于2018/4/19 15:19:35编辑过]

--  作者:大红袍
--  发布时间:2015/10/13 17:39:00
--  

先生成横向的表,再导出。

 

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=68546&replyID=&skin=1

 


--  作者:SMXTB
--  发布时间:2015/10/13 22:02:00
--  
感谢及时指点,但这个例子不能解决我的问题,如果说所有的列是一一对应的,这个例子刚好可以解决这个问题,但是我提出的问题中有一个是多值字段,那就是“同行人员”列,那个例中的人员有可能是多个人员,如张三、李四,但对应“姓名”列却是赵五,那么就要求,当时间是某一天的时候,出差“姓名”中为赵五的人,在统计表中赵五对应的出差地点就会对号入座,但同行人员中的张三、李四也是一同出差的,那就需要在那个时间对应的行显示张三、李四的出差地点与李四一样。
--  作者:大红袍
--  发布时间:2015/10/13 23:04:00
--  

参考代码

 

Dim ndt As new DataTableBuilder("临时")
ndt.AddDef("第一列",Gettype(String))
Dim ls As new List(Of String)
For Each dr As DataRow In DataTables("表A").datarows
    For Each s As String In (dr("第三列") & "," & dr("第五列")).split(",")
        If s > "" AndAlso ls.Contains(s) = False Then
            ls.add(s)
            ndt.AddDef(s, Gettype(String))
        End If
    Next
Next
ndt.Build

For Each dr As DataRow In DataTables("表A").datarows
    Dim fdr As DataRow = DataTables("临时").find("第一列 = \'" & dr("第一列") & "\'")
    If fdr Is Nothing Then
        fdr = DataTables("临时").AddNew
        fdr("第一列") = dr("第一列")
    End If
    For Each s As String In (dr("第三列") & "," & dr("第五列")).split(",")
        If s > "" AndAlso ls.Contains(s) Then
            fdr(s) = dr("第四列")
        End If
    Next
Next

[此贴子已经被作者于2015/10/13 23:04:44编辑过]

--  作者:SMXTB
--  发布时间:2015/10/14 8:57:00
--  
非常感谢。问题已经解决90%了,还有一个小问题没有解决,我把第一列作为出差时间列,按那个代码生成了一个临时表,基本上满足我的要求,但是在同一时间点上,出现了多行纪录,为什么不能象统计表一样,在第一列不出现重复的值呢?
图片点击可在新窗口打开查看
我试了,如果是字符型的不出现重复行,为什么换成日期列后,会产生多行重复呢
[此贴子已经被作者于2015/10/14 9:14:58编辑过]

--  作者:大红袍
--  发布时间:2015/10/14 9:16:00
--  

Dim ndt As new DataTableBuilder("临时")
ndt.AddDef("第一列",Gettype(Date))
Dim ls As new List(Of String)
For Each dr As DataRow In DataTables("表A").datarows
    For Each s As String In (dr("第三列") & "," & dr("第五列")).split(",")
        If s > "" AndAlso ls.Contains(s) = False Then
            ls.add(s)
            ndt.AddDef(s, Gettype(String))
        End If
    Next
Next
ndt.Build

For Each dr As DataRow In DataTables("表A").datarows
    Dim fdr As DataRow = DataTables("临时").find("第一列 = #" & dr("第一列") & "#")
    If fdr Is Nothing Then
        fdr = DataTables("临时").AddNew
        fdr("第一列") = dr("第一列")
    End If
    For Each s As String In (dr("第三列") & "," & dr("第五列")).split(",")
        If s > "" AndAlso ls.Contains(s) Then
            fdr(s) = dr("第四列")
        End If
    Next
Next


--  作者:SMXTB
--  发布时间:2015/10/14 13:36:00
--  
好的,非常感谢指导,问题差不多全部解决了,真的非常感谢。但还有一个问题,这个表需要统计的是某一个月的情况,如何在这段代码中加上一个条件,只加载某个月的数据呢?
--  作者:大红袍
--  发布时间:2015/10/14 14:10:00
--  

For Each dr As DataRow In DataTables("表A").datarows

 

改成

 

Dim Filter As string = 条件语句

For Each dr As DataRow In DataTables("表A").Select(filter)

 

http://www.foxtable.com/help/topics/2720.htm

 


--  作者:SMXTB
--  发布时间:2015/10/14 15:33:00
--  
For Each dr As DataRow In DataTables("表A").datarows这段代码两个地方都有,是改第一处吗还是两处都要改,再就是条件语句是这样写执行不了:
日期 "〈2015-09-30  〉2015-09-01",应该如何写呢

--  作者:大红袍
--  发布时间:2015/10/14 15:35:00
--  

Dim d As Date = new Date(2015, 9, 1)

Dim filter As String = "日期 >= #" & d & "# and 日期 < #" & d.AddMonths(1) & "#"

For Each dr As DataRow In DataTables("表A").Select(filter)