HighCharts获取EXCLE数据 c#

在阅读本文前,需要了解MVC(因为我的demo使用的mvc4 web 框架),Jquery,ajax,json数据格式

第一步:获取EXCLE数据,封装到Json中(它会获取excle有记录的表,如sheet1$,sheet2$的各前hours行汇总到一个json中)

变量说明:hours:x坐标;nums:曲线条数;

excle表结构:

 1         public ActionResult GetData(string hours, string nums) {
 2             int Nums = Convert.ToInt16(nums);
 3             string strConn = @"Provider = Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source =" + "d:\\sample.xls";//当然你可以通过传值来设置数据源
 4             OleDbConnection conn = new OleDbConnection(strConn);
 5             conn.Open();
 6             System.Data.DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
 7             conn.Close();
 8             List<string> tblName = new List<string>();
 9             for (int i = dt.Rows.Count - 1; i >= 0; i--)
10             {
11                 tblName.Add(dt.Rows[i]["TABLE_NAME"].ToString());
12             }
13             string strCom;
14             DataSet ds = new DataSet();
15             OleDbCommand cmd = new OleDbCommand();
16             for (int i = 0; i < Nums; i++)
17             {
18                 strCom = " SELECT top "+hours+" * FROM [" + tblName[i] + "];";
19                 cmd.Connection = conn;
20                 cmd.CommandText = strCom;
21                 OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
22                 conn.Open();
23                 adapter.Fill(ds, "table");
24                 conn.Close();
25             }
26             string data = ToJson(ds.Tables[0]);
27             return Json(data);
28         }

将DataTable 的每行转换为[{"hours":"1","batchNo":"001AA","value":0.3937007874},{"hours":"1","batchNo":"001AA","value":0.3937007874},]

 1         public string ToJson(DataTable dt)
 2         {
 3             StringBuilder jsonString = new StringBuilder();
 4             jsonString.Append("[");
 5             DataRowCollection drc = dt.Rows;
 6             for (int i = 0; i < drc.Count; i++)
 7             {
 8                 jsonString.Append("{");
 9                 for (int j = 0; j < dt.Columns.Count; j++)
10                 {
11                     string strKey = dt.Columns[j].ColumnName;
12                     string strValue = drc[i][j].ToString();
13                     if (strKey != "value")
14                     {
15                         jsonString.Append("\"" + strKey + "\":\"");
16                         if (j < dt.Columns.Count - 1)
17                         {
18                             jsonString.Append(strValue + "\",");
19                         }
20                         else
21                         {
22                             jsonString.Append(strValue + "\"");
23                         }
24                     }
25                     else
26                     {
27                         jsonString.Append("\"" + strKey + "\":");
28                         if (j < dt.Columns.Count - 1)
29                         {
30                             jsonString.Append(strValue + ",");
31                         }
32                         else
33                         {
34                             jsonString.Append(strValue + "");
35                         }
36                     }
37
38                 }
39                 jsonString.Append("},");
40             }
41             jsonString.Remove(jsonString.Length - 1, 1);
42             jsonString.Append("]");
43             return jsonString.ToString();
44         }

 第二步:index.cshtml 的脚本引用

 1     <script src="~/Scripts/jquery-1.7.1.min.js"></script>
 2     <script src="~/Scripts/jquery.easyui.min.js"></script>
 3     <script src="~/Scripts/highcharts.js"></script>
 4     <script src="~/Scripts/exporting.js"></script>
 5     <script src="~/Scripts/HighChart.js"></script>
HighChart.js 内容
 1 var HighChart = {
 2     ChartDataFormate: {
 3         FormatGroupData: function (data) {//处理分组数据,数据格式:name:XXX,group:XXX,value:XXX用于折线图、柱形图(分组,堆积)
 4             var names = new Array();
 5             var groups = new Array();
 6             var series = new Array();
 7             for (var i = 0; i < data.length; i++) {
 8                 // if (!names.contains(data[i].name)) {//括号内的方法有错误
 9                 if (jQuery.inArray(data[i].hours, names) == -1)
10                     names.push(data[i].hours);
11                 if (jQuery.inArray(data[i].batchNo, groups) == -1)
12                     groups.push(data[i].batchNo);
13             }
14             for (var i = 0; i < groups.length; i++) {
15                 var temp_series = {};
16                 var temp_data = new Array();
17                 for (var j = 0; j < data.length; j++) {
18                     for (var k = 0; k < names.length; k++)
19                         if (groups[i] == data[j].batchNo && data[j].hours == names[k])
20                         {
21                             temp_data.push(data[j].value);
22                         }
23                 }
24                 temp_series = { name: groups[i], data: temp_data };
25                 series.push(temp_series);
26             }
27             return { category: names, series: series };
28         }
29     },
30     ChartOptionTemplates: {
31         Line: function (data, name, title) {
32             var line_datas = HighChart.ChartDataFormate.FormatGroupData(data);
33             var option = {
34                 title: {
35                     text: title || ‘‘,
36                     x: -20
37                 },
38                 subtitle: {
39                     text: ‘‘,
40                     x: -20
41                 },
42                 xAxis: {
43                     categories: line_datas.category
44                 },
45                 yAxis: {
46                     title: {
47                         text: name || ‘‘
48                     },
49                     plotLines: [{
50                         value: 0,
51                         width: 1,
52                         color: ‘#808080‘
53                     }]
54                 },
55                 tooltip: {
56                     valueSuffix: ‘‘
57                 },
58                 legend: {
59                     layout: ‘horizontal‘,
60                     align: ‘center‘,
61                     verticalAlign: ‘bottom‘
62                 },
63                 series: line_datas.series
64             };
65             return option;
66         }
67     },
68     RenderChart: function (option, container) {
69         container.highcharts(option);
70     }
71 };

第三步:index.cshtml界面内容

 1 <script type="text/javascript">
 2         function getData() {
 3             var hours = $("#hours").val();
 4             var nums = $("#nums").val();
 5             var title = $("#title").val();
 6             $.ajax({
 7                 url: "/Charts/GetData/",
 8                 type: "POST",
 9                 datatype: "json",
10                 data: { Hours: hours, Nums: nums },
11                 success: function (data) {
12                     var data = data;
13                     var json = JSON.parse(data);
14                     //绘制
15                     var opt = HighChart.ChartOptionTemplates.Line(json, ‘淘汰率‘, title);
16                     var container = $("#container");
17                     HighChart.RenderChart(opt, container);
18                 }
19             });
20
21         }
22 </script>
23
24 </head>
25 <body>
26     <div>
27         <fieldset>
28             <legend>信息设置</legend>
29             筛选时间:<input class="easyui-validatebox" type="text" id="hours" name="hours" /> h&nbsp;&nbsp;&nbsp;&nbsp;曲线条数:<input class="easyui-validatebox" type="text" id="nums" name="nums" /> 条&nbsp;&nbsp;&nbsp;&nbsp;标题:<input class="easyui-validatebox" type="text" id="title" name="title" />
30             <a href="javascript:void(0)" class="easyui-linkbutton" id="btnLogin" iconcls="icon-ok" onclick="getData()">绘制</a>
31         </fieldset>
32     </div>
33     <div id="container" style="min-width:700px;height:400px"></div>
34 </body>
35 </html>

效果预览:

  

时间: 2024-10-01 09:56:07

HighCharts获取EXCLE数据 c#的相关文章

导入excle数据将excle数据插入到数据库

实现功能是,用户可以直接导入对应数据,或者用户下载模板,填写数据,导入模板数据.easyui实现 前台页面 { text : '日清导入', iconCls : 'icon-print', handler : function(){ $('#import').dialog('open'); } } <div id = "import" title="员工信息导入" modal=true draggable=true align="center&quo

关于springmvc的获取前段数据和页面输出

项目的创建在这里就不写啦,如果实在不会,看看前面的,这里就直接上代码啦! 首先,是创建一个jsp文件,功能实现简单的登录功能,没什么重要的.. 这个就是简单的前段界面,这里需要注意的一点就是action="login",这里的login是一个虚拟路径, 也就是获取前端数据action的虚拟路径,要前后一致: 下面的就是获取前段数据以及验证的一种方式,这一中是比较简单的 就是在入参处获取request的对象:从而达到下面的操作 @Controllerpublic class LoginC

前台通过ajax获取后台数据,PHP如何返回中文数据

现在经常使用Ajax调用后台php获取后台数据,但是PHP返回的数据如果含有中文的话,Ajax会无法识别,那咋整呢,我用的是比较笨的方法,但是实用: echo urldecode(json_encode(array('status'=>'1', 'errMsg'=>urlencode('数据传递错误,请重试')))); return;

ajax请求获取的数据无法赋值给全局变量问题总结

一.总结: 1.问题描述: 今天做项目遇到在用表单显示详细信息的过程中ajax请求获取的数据无法赋值给全局变量的情况,从列表页面进入详情页,在详情页面被渲染了之后就会调用js文件里的接口向服务器请求数据,除了详情页面被加载之后需要向服务器发送ajax请求,在详情页面还有几个表单控件的属性需要去请求服务器获取实际项目中要求要显示的数据. 如下代码,直接在ajax请求中改变表单控件的值,避开了给全局变量赋值. 给全局变量赋值的解决办法,给ajax请求设置async为false,表示请求为同步请求:

一个实时获取股票数据的安卓应用程序

关键字:Stock,股票,安卓,Android Studio. OS:Windows 10. 最近学习Android应用开发,不知道写一个什么样的程序来练练手,正好最近股票很火,就一个App来实时获取股票数据,取名为Mystock.使用开发工具Android Studio,需要从Android官网下载,下载地址:http://developer.android.com/sdk/index.html.不幸的是Android是Google公司的,任何和Google公司相关的在国内都无法直接访问,只能

.NET 微信开发之 获取用户数据

通过微信接口获取用户信息主要分为以下几个步骤: a.获取公众号的access_token b.通过查询所有用户OPenid接口获取所有用户. string url = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=" + access_token; c.通过获取用户openid,然后通过openid获取用户数据 d.把用户信息添加到数据库中. 1.参数化查询以及添加用户信息到数据库方法 public void AddT

从$res获取行数据

1 从$res获取行数据的时候,处理 mysql_fetch_row($res),还有三个方法. 2 分别是 3 mysql_fetch_row($res) ,返回一个索引的数组 (推荐.) 4 mysql_fetch_assoc($res) ,返回一个关联数组 5 mysql_fetch_array($res) ,返回索引数组和关联数组 (两套) 6 mysql_fetch_object($res) ,把一行数据,当做一个对象返回.

如何从Zabbix数据库中获取监控数据

做过Zabbix的同学都知道,Zabbix通过专用的Agent或者SNMP收集相关的监控数据,然后存储到数据库里面实时在前台展示.Zabbix监控数据主要分为以下两类: 历史数据:history相关表,从history_uint表里面可以查询到设备监控项目的最大,最小和平均值,即存储监控数据的原始数据. 趋势数据:trends相关表,趋势数据是经过Zabbix计算的数据,数据是从history_uint里面汇总的,从trends_uint可以查看到监控数据每小时最大,最小和平均值流量. Zabb

java获取天气预报数据

获取天气预报数据 对于做web项目有天气数据的需求,这个服务很合适: WebXml.com.cn 2400多个城市天气预报Web服务,包含2300个以上中国城市和100个以上国外城市天气预报数据.数据每2.5小时左右自动更新一次,准确可靠.提供webservice 接口,主连接:http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx/ 方法调用说明如下: (1)getRegionCountry :获得国外国家名称和与之对应的ID 说明