Foxtable(狐表)用户栏目专家坐堂 → [求助]统计表导出并生成图表


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

主题:[求助]统计表导出并生成图表

帅哥哟,离线,有人找我吗?
大红袍
  21楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/5/10 17:12:00 [只看该作者]

以下是引用cqlpjks在2016/5/10 17:11:00的发言:
我是想在一起显示,并在导出时在一个表中。

 

本来就是导出在一个excel文件里面,上下显示了啊。


 回到顶部
帅哥哟,离线,有人找我吗?
cqlpjks
  22楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:407 积分:3194 威望:0 精华:0 注册:2011/2/28 11:57:00
  发帖心情 Post By:2016/5/11 16:04:00 [只看该作者]

请教:问题出在哪儿?先统计,再导出。导出时提示“未将对象引用设置到对象的实例”。硬没找到原因。代码如何修改?请指教。谢谢!

例:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:高三分析统计程序测试.rar

导出后统计表(含图表)效果:
图片点击可在新窗口打开查看此主题相关图片如下:123.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2016/5/11 16:04:26编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  23楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/5/11 16:36:00 [只看该作者]

Dim dlg As New SaveFileDialog '定义一个新的SaveFileDialog
dlg.Filter= "Excel文件|*.xls" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    '生成图表
    Dim Chart As new ChartBuilder '定义一个图表变量
    Dim Series As WinForm.ChartSeries '定义一个图系变量
    Dim t As Table = Tables("总分重点人数对照表") '定义一个变量t引用数据表
   
    Chart.ChartType = ChartTypeEnum.Bar '图表类型改为Bar(条形)
    Chart.SeriesList.Clear() '清除图表原来的图系
    Dim xms As List(of String) = t.DataTable.GetValues("单位","单位 <> '市级分数线'")
    For Each xm As String In xms
        Series = Chart.SeriesList.Add() '增加一个图系
        Series.Text = xm '设置图系的标题
        series.length = t.Cols.count-2
        Chart.AxisY.Major = 10 '主刻度间隔值为10
        For r As Integer = 0 To t.Cols.count-3
            Series.X(r) = r
            Series.Y(r) = val(t.Compute("sum(" & t.Cols(r+2).name & ")", "单位 = '" & xm & "'"))
            Chart.AxisX.SetValueLabel(r, t.Cols(r+2).caption) '指定字符表示
        Next
    Next
    
    series.DataLabelCompass = LabelCompassEnum.North
    Series.DataLabelText = "{#YVAL}"
    Chart.AxisX.AnnoWithLabels = True '启用字符标示
    Chart.AxisX.AnnoRotation = - 45 'X轴标示逆时针旋转45度
    chart.SeriesList(0).MarkSize= 1 '设置数据点标记的大小
    Chart.VisualEffect = True '加上这一行,让你的图表更漂亮
    Chart.LegendVisible = True '显示图列
    Chart.LegendCompass= CompassEnum.South '图列显示在南方(底端)
    Chart.AxisX.Text = "单位"
    chart.LegendText = "图例:年级"
   
    Chart.AxisY.Text = "重点人数"
    Chart.PrintWidth = 360
    Chart.PrintHeight = 180
    '保存文件
    t.SaveExcel(dlg.FileName, "重点人数对照表") '保存文件
    Dim b As New XLS.Book(dlg.FileName)
    Dim s As XLS.Sheet = b.Sheets("重点人数对照表")
    s(t.rows.Count + 2,1).Value = New XLS.Picture(Chart.Image)
    b.Save(dlg.FileName)
    DataTables.unload( "总分重点人数对照表")
End If
e.Form.Controls("Label1").Text = "总分重点人数对照表已导出并删除!"

 回到顶部
帅哥哟,离线,有人找我吗?
cqlpjks
  24楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:407 积分:3194 威望:0 精华:0 注册:2011/2/28 11:57:00
  发帖心情 Post By:2016/5/11 16:59:00 [只看该作者]

谢谢!但导出的图表不清晰。


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

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  25楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/5/11 17:10:00 [只看该作者]

Dim dlg As New SaveFileDialog '定义一个新的SaveFileDialog
dlg.Filter= "Excel文件|*.xls" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    '生成图表
    Dim Chart As new ChartBuilder '定义一个图表变量
    Dim Series As WinForm.ChartSeries '定义一个图系变量
    Dim t As Table = Tables("总分重点人数对照表") '定义一个变量t引用数据表
   
    Chart.ChartType = ChartTypeEnum.Bar '图表类型改为Bar(条形)
    Chart.SeriesList.Clear() '清除图表原来的图系
    Dim xms As List(of String) = t.DataTable.GetValues("单位","单位 <> '市级分数线'")
    For Each xm As String In xms
        Series = Chart.SeriesList.Add() '增加一个图系
        Series.Text = xm '设置图系的标题
        series.length = t.Cols.count-2
        'Chart.AxisY.Major = 10 '主刻度间隔值为10
        For r As Integer = 0 To t.Cols.count-3
            Series.X(r) = r
            Series.Y(r) = val(t.Compute("sum(" & t.Cols(r+2).name & ")", "单位 = '" & xm & "'"))
            Chart.AxisX.SetValueLabel(r, t.Cols(r+2).caption) '指定字符表示
        Next
        series.DataLabelCompass = LabelCompassEnum.North
        Series.DataLabelText = "{#YVAL}"
    Next
   
    series.DataLabelCompass = LabelCompassEnum.North
    Series.DataLabelText = "{#YVAL}"
    Chart.AxisX.AnnoWithLabels = True '启用字符标示
    Chart.AxisX.AnnoRotation = - 45 'X轴标示逆时针旋转45度
    'chart.SeriesList(0).MarkSize= 1 '设置数据点标记的大小
    Chart.LegendVisible = True '显示图列
    Chart.LegendCompass= CompassEnum.South '图列显示在南方(底端)
    Chart.AxisX.Text = "单位"
    chart.LegendText = "图例:年级"
    Chart.BarClusterWidth = 80
    Chart.AxisY.Text = "重点人数"
    Chart.PrintWidth = 360
    Chart.PrintHeight = 180
    '保存文件
    t.SaveExcel(dlg.FileName, "重点人数对照表") '保存文件
    Dim b As New XLS.Book(dlg.FileName)
    Dim s As XLS.Sheet = b.Sheets("重点人数对照表")
    s(t.rows.Count + 2,1).Value = New XLS.Picture(Chart.Image)
    b.Save(dlg.FileName)
    'DataTables.unload( "总分重点人数对照表")
End If
‘e.Form.Controls("Label1").Text = "总分重点人数对照表已导出并删除!"

 回到顶部
帅哥哟,离线,有人找我吗?
cqlpjks
  26楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:407 积分:3194 威望:0 精华:0 注册:2011/2/28 11:57:00
  发帖心情 Post By:2016/5/11 17:13:00 [只看该作者]

麻烦您了。谢谢!


 回到顶部
帅哥哟,离线,有人找我吗?
cqlpjks
  27楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:407 积分:3194 威望:0 精华:0 注册:2011/2/28 11:57:00
  发帖心情 Post By:2016/5/27 9:27:00 [只看该作者]

导出并生成图表:在同一个统计表中分别显示“人数”和“贡献率%”两个图表。怎么修改代码?请指教。谢谢!

例:

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:高三分析统计程序测试.rar

如:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:有效分及贡献率统计表.xls


图片点击可在新窗口打开查看此主题相关图片如下:图表.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2016/5/27 9:27:08编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  28楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/5/27 10:55:00 [只看该作者]

你能不能自己写一下代码,不要什么都要别人帮你写?

 

你生成第一个图表,再生产第二个图表,然后插入excel就行啊。


 回到顶部
帅哥哟,离线,有人找我吗?
cqlpjks
  29楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:407 积分:3194 威望:0 精华:0 注册:2011/2/28 11:57:00
  发帖心情 Post By:2016/5/27 16:01:00 [只看该作者]

生成的图表怎么又麻麻密密的了?不清晰。请指教。谢谢!

代码:

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:导出并生成图表代码.txt

生成的图表:


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

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  30楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/5/27 16:11:00 [只看该作者]

Dim dlg As New SaveFileDialog '定义一个新的SaveFileDialog
dlg.Filter= "Excel文件|*.xls" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    Dim Values() As String = {"总分"}
    If e.Form.Controls("年级").value Is Nothing And e.Form.Controls("类别").value Is Nothing Then
        MessageBox.Show("请选择统计年级和类别再执行此操作","中止操作",MessageBoxButtons.OK,MessageBoxIcon.Exclamation)
    Else
        Dim tjnj As String = e.Form.Controls("年级").text
        Dim tjlb As String = e.Form.Controls("类别").text
        For Each Value As String In Values
            '生成第一个图表显示人数
            Dim Chart As new ChartBuilder '定义一个图表变量
            Dim Series As WinForm.ChartSeries '定义一个图系变量
            Dim t As Table = Tables( "高" & tjnj & "级" & tjlb & "重点有效分和贡献率统计表") '定义一个变量t引用数据表
            Chart.ChartType = ChartTypeEnum.Bar '图表类型改为Bar(条形)
            Chart.ChartType2 = ChartTypeEnum.XYPlot '图表2类型该为线形
            Chart.SeriesList.Clear() '清除图表原来的图系
            Dim xms() As String = {"重庆市","全县合计","梁平中学","红旗中学","第一中学","屏锦中学","实验中学","袁驿中学","福禄中学"}
            Dim hms() As String = {"人数"}
            For Each xm As String In xms
                For Each hm As String In hms
                    Series = Chart.SeriesList.Add() '增加第一个图系
                    Series.Text = xm '设置图系的标题
                    series.length = t.Cols.count-3
                     For r As Integer = 0 To t.Cols.count-8 '横坐标开始列位置
                        Series.X(r) = r
                        Series.Y(r) = val(t.Compute("sum(" & t.Cols(r+7).name & ")", "单位 = '" & xm & "'And  项目 = '" & hm & "'"))
                        Chart.AxisX.SetValueLabel(r, t.Cols(r+7).caption) '指定字符表示
                    Next
                    series.DataLabelCompass = LabelCompassEnum.North
                    Series.DataLabelText = "{#YVAL}"
                Next
            Next
           
            Chart.SeriesList2.Clear() '清除图表原来的图系
            Dim hm1s() As String = {"贡献率%"}
            For Each xm As String In xms
                For Each hm1 As String In hm1s
                    Series = Chart.SeriesList2.Add() '增加批二个图系
                    Series.Text = xm '设置图系的标题
                    series.length = t.Cols.count-3
                    For r As Integer = 0 To t.Cols.count-8 '横坐标开始列位置
                        Series.X(r) = r
                        Series.Y(r) = val(t.Compute("sum(" & t.Cols(r+7).name & ")", "单位 = '" & xm & "'And  项目 = '" & hm1 & "'"))
                        Chart.AxisX.SetValueLabel(r, t.Cols(r+7).caption) '指定字符表示
                    Next
                    series.DataLabelCompass = LabelCompassEnum.North
                    Series.DataLabelText = "{#YVAL}"
                Next
               
            Next
           
           
            Chart.AxisX.AnnoWithLabels = True '启用字符标示
            Chart.AxisX.AnnoRotation = -45 'X轴标示逆时针旋转45度

            Chart.LegendVisible = True '显示图列
            Chart.LegendCompass= CompassEnum.South '图列显示在南方(底端)
            Chart.AxisX.Text = "文 理 科"
            chart.LegendText = "图例:单位"
            Chart.BarClusterWidth = 100
            Chart.AxisY.Text = "人数"
            Chart.AxisY2.Text = "贡献率%"
           
            Chart.PrintWidth = 360
            Chart.PrintHeight = 180
           
            '保存文件
            t.SaveExcel(dlg.FileName,  "高" & tjnj & "级" & tjlb & "重点有效分和贡献率统计表") '保存文件
            Dim b As New XLS.Book(dlg.FileName)
            Dim s As XLS.Sheet = b.Sheets( "高" & tjnj & "级" & tjlb & "重点有效分和贡献率统计表")
            s(t.rows.Count + 2,1).Value = New XLS.Picture(Chart.Image)
           
            Dim Style As Xls.Style = b.NewStyle '新建一个样式
            Style.ForeColor = Color.Red '样式的背景颜色设为红色
            Style.Font = new font("宋体",9,FontStyle.Bold)
            Style.AlignHorz = XLS.AlignHorzEnum.Center '居中
            Style.AlignVert = XLS.AlignVertEnum.Center '居中
            For i As Integer = 0 To s.Rows.count -1
                Dim Hjs() As String = {"重庆市","全县合计"}
                For Each Hj As String In Hjs
                    If s(i,3).Text.EndsWith(Hj) Then  '如果指定列(第3列)中含Hj字符存在
                        For n As Integer = 0 To s.Cols.count -1
                            s(i,n).Style = Style
                        Next
                    End If
                Next
            Next
           
            b.Save(dlg.FileName)
            'DataTables.Delete( "高" & tjnj & "级" & tjlb & "重点有效分和贡献率统计表") '删除原文件
        Next
       
    End If
End If
e.Form.Controls("Label1").Text = "有效分及贡献率统计表已导出并删除!"


 回到顶部
总数 33 上一页 1 2 3 4 下一页