码迷,mamicode.com
首页 > 其他好文 > 详细

echarts图表传递到服务端然后写入Excal

时间:2017-10-13 20:16:29      阅读:515      评论:0      收藏:0      [点我收藏+]

标签:服务端   问题   byte   表单   plugins   info   result   png   自动   

最近的公司项目要求,让我找到一个可以让 echart转换为图片输入excal的功能,有几个点的总结,拿出来和大家分享。

思路是这样的:

将echart图在js里转换为imgbase64位格式再用表单post传递到后台,然后再在后台将base64转换为图片,给图片定义随机名称,储存在服务端,将储存路径

获取传到excal图片插入的参数后,这样就ok了。 也考虑了 导出迸发量问题。如果两个人同时导出也是不会有问题的。

1.base64位截取到正确的数据传递到后台,给后台解析

 

var picBase64Info = myChart.getDataURL().split("data:image/png;base64,"); //获取base64编码
//base64位转换后的前面的头要掐掉

 

2.将imgbase64传递到后台,这个问题我卡了有好一会,技术不行,.net的小菜鸟~  

 $.ajax({
            url:@Url.Action("img"),
            type:POST,
            contentType:"application/x-www-form-urlencoded",
            data:{
                //掐掉以后是一个数组 取第二个
                pic:picBase64Info[1]
            },
            success:function(data){
          //下面是我的excal导出路径
                var url = @Url.Action("ExportExcel") + "?projectid=" + projectId + "&starttime=" + starttime + "&endtime=" + endtime+"&chartfilename="+data;
                    window.open(url);
                    $("#excelExport").removeAttr("disabled");

            }
          });

3.将base64解析储存在服务端

      [HttpPost]
        public string img(string pic)
        {
                //文件名称
                var filename = Path.GetRandomFileName();
                //下面是我的文件路径
                string imagesu = Server.MapPath("~/Plugins//III.Web.SaleDemo/Content/Images/ExcalImage/"+filename);
                //考虑到文件名重复,将会自动删除掉
                var isNull = System.IO.File.Exists(imagesu);
                if (isNull)
                {
                    //重复就delete
                    System.IO.File.Delete(imagesu);
                }
                //转换base64
                var picbytes = Convert.FromBase64String(pic);
            
                var bitmap = new Bitmap(new MemoryStream(picbytes));
                //存储图片,并且定义格式
                bitmap.Save(imagesu, ImageFormat.Png);
               return filename;
        }

4.excal导出

        [HttpGet]
        public ActionResult ExportExcel(int projectId, DateTime starttime, DateTime endtime,string chartfilename)
        {
             //第四个参数是文件名

                         /........
     string imagesu = Server.MapPath("~/Plugins//III.Web.SaleDemo/Content/Images/ExcalImage/"+ chartfilename);


}

5.最后案例excal的图片插入吧

   ExcelPicture picture2 = ws.Drawings.AddPicture("yuan", Image.FromFile(imagesu));//插入图片
                picture2.SetPosition(280, 30);//设置图片的位置
                picture2.SetSize(800, 350);//设置图片的大小

这就是我的总结啦= = ,记录成长。 

 2017/10/13    实习第三个月

 

echarts图表传递到服务端然后写入Excal

标签:服务端   问题   byte   表单   plugins   info   result   png   自动   

原文地址:http://www.cnblogs.com/wufanJY/p/7662767.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!