Foxtable(狐表)用户栏目专家坐堂 → excel报表求助


  共有5531人关注过本帖树形打印复制链接

主题:excel报表求助

帅哥哟,离线,有人找我吗?
花开的声音
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1172 积分:8418 威望:0 精华:0 注册:2012/10/29 20:09:00
excel报表求助  发帖心情 Post By:2015/2/2 8:49:00 [显示全部帖子]

如图,分组统计中,同样的代码,放在表的下面就能正确统计,放在表头就统计不出来,怎么回事。想放在上面统计每个分组的法律服务所数,怎么弄,谢谢!
图片点击可在新窗口打开查看此主题相关图片如下:qq图片20150202084909.jpg
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
花开的声音
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1172 积分:8418 威望:0 精华:0 注册:2012/10/29 20:09:00
  发帖心情 Post By:2015/2/2 10:33:00 [显示全部帖子]

那我通过目录树的复选框,用filter筛选出记录后,是不是要把筛选结果保存为一张表,才能进一步设置条件筛选出符合条件的记录的数量并付值给var变量?如是的话,那怎样将筛选结果保存为一张表?


 回到顶部
帅哥哟,离线,有人找我吗?
花开的声音
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1172 积分:8418 威望:0 精华:0 注册:2012/10/29 20:09:00
  发帖心情 Post By:2015/2/2 12:43:00 [显示全部帖子]

'------------筛选出符合条件的记录--------------
Dim trv As WinForm.TreeView = e.Sender
Dim flt As String
Dim nd As WinForm.TreeNode
Dim pd As WinForm.TreeNode
Dim notchecked As Integer
Dim t As Table
t = Tables("基层法律服务机构信息表")
If e.Node.Name = "全部"  Then
    If e.Node.Checked = True Then
        For Each nd In trv.AllNodes
            If nd.Name <> "全部"  Then
                nd.Checked = False
            End If
        Next
        t.Filter = ""
    Else
        For Each nd In trv.AllNodes
            nd.Checked = False
        Next
        t.Filter = (1 = 2)
    End If
    trv.CollapseAll
    Return
Else
    trv.AllNodes(0).Checked = False
End If
For Each nd In e.node.allNodes
    nd.Checked = False
Next
pd = e.Node.ParentNode
Do While pd IsNot Nothing
    pd.Checked = False
    pd = pd.ParentNode
Loop
For Each nd In trv.AllNodes
    If nd.Checked  Then
        Dim vals As String = ""
        If vals > "" Then
            vals = vals & " And "
            Select Case e.Node.Level
                Case 0
                    vals &= "主管司法局= '" & nd.DataRow("主管司法局") & "'"
                Case 1
                    vals &= "主管司法局='" & nd.DataRow("主管司法局") & "' and  法律服务所= '" & nd.DataRow("法律服务所") & "'"
            End Select
        Else
            vals=vals
            Select Case e.Node.Level
                Case 0
                    vals &= "主管司法局= '" & nd.DataRow("主管司法局") & "'"
                Case 1
                    vals &= "主管司法局='" & nd.DataRow("主管司法局") & "' and  法律服务所= '" & nd.DataRow("法律服务所") & "'"
            End Select
            If flt > "" Then
                flt = flt & " Or (" & vals & ")"
            Else
                flt = vals
            End If
            notchecked + = 1
        End If
    End If
Next
If flt > "" AndAlso notchecked > 0 Then
    t.Filter = flt
   ' Dim cont1 As Double = Tables("基层法律服务机构信息表").Compute("count(法律服务所)", "主管司法局 = '" & e.Node.Name & "'")
   ' vars("分组统计法律服务所数")=cont1
   ' MessageBox.Show(vars("分组统计法律服务所数"))
Else
    t.Filter = (1 = 2)
End If


 


'-----------加载相应报表----------

Dim Book As New XLS.Book(ProjectPath & "Attachments\基层法律服务所名册.xls")
Dim fl As String = ProjectPath & "Reports\基层法律服务所名册.xls"
Book.Build() '生成细节区
Book.Marks.Add("法律服务所数",Tables("基层法律服务机构信息表").Compute("count(法律服务所)", "主管司法局 = [主管司法局]"))
Book.Save(fl) '保存工作簿
'book.Save("c:\data\test.xls")

Dim App As New MSExcel.Application
app.DisplayAlerts = False
Dim Wb As MSExcel.Workbook = App.WorkBooks.Open(fl)
Wb.SaveAs(Filename:=ProjectPath & "Reports\基层法律服务所名册.htm", FileFormat:=MSExcel.XlFileFormat.xlHtml)
wb.close
app.quit

Dim str As String = FileSys.ReadAllText(ProjectPath & "Reports\基层法律服务所名册.htm",  Encoding.Default)
'str = str.Replace("<style>", "<style>table {margin:auto}")
str = str.Replace("<style>", "<style>body{ text-align: center;} table {margin:auto}")
FileSys.WriteAllText(ProjectPath & "Reports\基层法律服务所名册.htm",  str, False, Encoding.Default)

Dim str1 As String = FileSys.ReadAllText(ProjectPath & "Reports\基层法律服务所名册.files\stylesheet.css", Encoding.Default)
str1="body{ text-align: center;} Table {margin-left:auto ; margin-right:auto}" & str1
FileSys.WriteAllText(ProjectPath & "Reports\基层法律服务所名册.files\stylesheet.css",str1, False, Encoding.Default)


Dim wbr As WinForm.WebBrowser = Forms("基层法律服务机构报表").Controls("WebBrowser1")
Dim rpt As String = ProjectPath & "Reports\基层法律服务所名册.htm"
wbr.AddRess = rpt

 

在报表的表头上设计标记  <法律服务所数> ,在左边的目录树的复选框改变豆腐中用以上代码,怎么报表的表头什么也没有显示,要怎么改才行。目的是要在表头上显示每个分组中的记录数。谢谢!


 回到顶部
帅哥哟,离线,有人找我吗?
花开的声音
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1172 积分:8418 威望:0 精华:0 注册:2012/10/29 20:09:00
  发帖心情 Post By:2015/2/2 14:09:00 [显示全部帖子]

麻烦哪位帮看下。

 回到顶部
帅哥哟,离线,有人找我吗?
花开的声音
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1172 积分:8418 威望:0 精华:0 注册:2012/10/29 20:09:00
  发帖心情 Post By:2015/2/2 14:22:00 [显示全部帖子]

嗯,在表头上单独用<法律服务所数> ,数量是生成正确了。在表头显示时,这个字符串,生成不了。请帮看下,该怎么写的。<[主管司法局] & ":" & "共" & <法律服务所数> & "个法律服务所">

 回到顶部
帅哥哟,离线,有人找我吗?
花开的声音
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1172 积分:8418 威望:0 精华:0 注册:2012/10/29 20:09:00
  发帖心情 Post By:2015/2/2 14:28:00 [显示全部帖子]

这个是设计时的标记

 回到顶部
帅哥哟,离线,有人找我吗?
花开的声音
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1172 积分:8418 威望:0 精华:0 注册:2012/10/29 20:09:00
  发帖心情 Post By:2015/2/2 14:36:00 [显示全部帖子]

哦,刚才说的正确生成法律服务所数是错的,生成一个分组是正确的,但生成两个以上的分组时,就是总共的分组的数量加起来的,没有按每个分组来统计法律服务所数。

 回到顶部
帅哥哟,离线,有人找我吗?
花开的声音
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1172 积分:8418 威望:0 精华:0 注册:2012/10/29 20:09:00
  发帖心情 Post By:2015/2/2 14:39:00 [显示全部帖子]

以下是引用Bin在2015-2-2 14:31:00的发言:
<[主管司法局] & ":共<法律服务所数>个法律服务所">

或者分开为3个单元格  中间放 <法律服务所数> 看看

<[主管司法局] & ":共<法律服务所数>个法律服务所">
这个写不行。分3个单元格没试,如要分的话也很不好看呢。


 回到顶部
帅哥哟,离线,有人找我吗?
花开的声音
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1172 积分:8418 威望:0 精华:0 注册:2012/10/29 20:09:00
  发帖心情 Post By:2015/2/2 19:39:00 [显示全部帖子]

还是没搞定。求帮助,各事件和代码如下:
全局变量2个:flt,这个是用来在勾选目录树复选框时,筛选记录的筛选条件;法律服务所数,这个是报表标签。
事先在excel报表的表头单元格插入标签 <法律服务所数>
报表事件:BuildGroupHeader 代码:
    Select Case e.Book.TempLate
    Case "基层法律服务所名册"
        e.Book.Marks("法律服务所数") = DataTables("基层法律服务机构信息表").Compute("count(法律服务所)",Flt)
End Select

生成报表的代码(即在点选目录树的复选框时,在用条件flt对记录进行筛选后,接着生成报表):
Dim Book As New XLS.Book(ProjectPath & "Attachments\基层法律服务所名册.xls")
Dim fl As String = ProjectPath & "Reports\基层法律服务所名册.xls"
Book.Build() '生成细节区
Book.Save(fl) '保存工作簿

现在运行的结果是,单选目录树的一个复选框(不同的司法局,即主管司法局),即只产生一个分组时,报表中表头的标签<法律服务所数>产生的数是对的,但如点选两个以上的复选框,刚每个分组表头的标签<法律服务所数>产生的数都是相同的,都是各个分组的和。

不晓得怎么修改,麻烦帮看下。

 回到顶部
帅哥哟,离线,有人找我吗?
花开的声音
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1172 积分:8418 威望:0 精华:0 注册:2012/10/29 20:09:00
  发帖心情 Post By:2015/2/2 19:48:00 [显示全部帖子]

以下是目录树复选框变动事件的代码,麻烦帮看下:
'------------筛选出符合条件的记录--------------
Dim trv As WinForm.TreeView = e.Sender
'Dim flt As String
Dim nd As WinForm.TreeNode
Dim pd As WinForm.TreeNode
Dim notchecked As Integer
Dim t As Table
t = Tables("基层法律服务机构信息表")
If e.Node.Name = "全部"  Then
    If e.Node.Checked = True Then
        For Each nd In trv.AllNodes
            If nd.Name <> "全部"  Then
                nd.Checked = False
            End If
        Next
        t.Filter = ""
    Else
        For Each nd In trv.AllNodes
            nd.Checked = False
        Next
        t.Filter = (1 = 2)
    End If
    trv.CollapseAll
    Return
Else
    trv.AllNodes(0).Checked = False
End If
For Each nd In e.node.allNodes
    nd.Checked = False
Next
pd = e.Node.ParentNode
Do While pd IsNot Nothing
    pd.Checked = False
    pd = pd.ParentNode
Loop
For Each nd In trv.AllNodes
    If nd.Checked  Then
        Dim vals As String = ""
        If vals > "" Then
            vals = vals & " And "
            Select Case e.Node.Level
                Case 0
                    vals &= "主管司法局= '" & nd.DataRow("主管司法局") & "'"
                Case 1
                    vals &= "主管司法局='" & nd.DataRow("主管司法局") & "' and  法律服务所= '" & nd.DataRow("法律服务所") & "'"
            End Select
        Else
            vals=vals
            Select Case e.Node.Level
                Case 0
                    vals &= "主管司法局= '" & nd.DataRow("主管司法局") & "'"
                Case 1
                    vals &= "主管司法局='" & nd.DataRow("主管司法局") & "' and  法律服务所= '" & nd.DataRow("法律服务所") & "'"
            End Select
            If flt > "" Then
                flt = flt & " Or (" & vals & ")"
            Else
                flt = vals
            End If
            notchecked + = 1
        End If
    End If
Next
If flt > "" AndAlso notchecked > 0 Then
    t.Filter = flt
   ' Dim cont1 As Double = Tables("基层法律服务机构信息表").Compute("count(法律服务所)", "主管司法局 = '" & e.Node.Name & "'")
   ' vars("分组统计法律服务所数")=cont1
   ' MessageBox.Show(vars("分组统计法律服务所数"))
Else
    t.Filter = (1 = 2)
End If


 回到顶部
总数 26 1 2 3 下一页