前言

  今天项目中遇到一个需求把我们系统中的统计数据导出来(主要是表格)。其实实现的的方法有很多,而此次针对我的系统第一获取数据有点慢,加上前不久写了一个在线阅读pdf,故此这次也想用前端的方式来导出。其实网上大致是两种一种是微软那种直接排除了,选择了运用第三方插件的方式。我用的jquery.wordexport.js导出的word,顺便尝试了一下jquery.table2excel.js导出Excel。顺便我的统计中也H5图表用的是echart。

导出word(jquery.wordexport.js)

此插件运用其实很简单,在这个过程当中主要遇到的就是系统中的样式没办法运用外联的方式。合并单元格rowspan我们系统中是用的display我需要把它移除。下面说过程。

1.js引用与实现

1.1.请按下方顺序引用不然是不能正常执行的依赖。

<script src="jqwordexport/jquery-1.11.1.js"></script>
<script src="jqwordexport/FileSaver.js"></script>
<script src="jqwordexport/jquery.wordexport.js"></script>

1.2.实现代码就更简单了。

 $("#showDIV").wordExport(FineName)

一行代码就行FineName为文件名。

2.问题的解决

首先这是我页面上的内容,我需要把这个table放到showDIV中的一个div中;还要同时把这个table所在的div中不需要的删除。如下

 var htmlstr = $("#HiddenDanger").html();//table所在div
 $('#printWord').html(htmlstr);
 $('#printWord div[data-role=pager]').remove();//把分页div删除
 $('#showDIV script').remove();//div引用的js代码删除

然后导出,这样你会发现只有这个table,并且table为虚线,是不是也要把查询条件,导出内容加上去。

我把这些内容也同时加到了showDIV 中。如下

<div id="showDIV" >
    <style>
        #printWord table {
            border: 1px solid #ddd;
            border-collapse: collapse;
            width: 95%;
            margin: auto;
        }
            #printWord table tr td {
                border: 1px solid #ddd;
            }

            #printWord table tr th {
                border: 1px solid #ddd;
                border-radius: 10px;
            }
    </style>
    <h2 style="text-align: center;">
        隐患等级数量统计
    </h2>
    <div style="text-align: right;margin-right: 50px; font-size: 16px;font-style: italic">
        <span style="color: blue;">线路</span>:<span id="slineName"></span>&nbsp;&nbsp;&nbsp;
        <span style="color: blue;">时间</span>:<span id="stm"></span>
    </div>
    <div id="printWord" />
</div>

是的通过进行动态复制查询条件,然后到处即可

 function word() {
        var stm = $('#tm').val()
        var slineName = $("#line").data("kendoDropDownList").text();
        var FineName = $('#line').text() + $('#tm').val() + '隐患等级数量统计';
        $('#slineName').html(slineName);
        $('#stm').html(stm);
        $("#showDIV").wordExport(FineName)
    }

以上基本的html表格就能正常到处了,不需要调用后台,代码书写也方便。

3.echart 导出

上面也说我们系统中还有图标这种方式直接到处会发现他会自动把echart生成table

暂时我用的网上的建议通过保存图片的方式进行img链接的方式进行导出了。如下:

3.1.先获取echart 图片流

//将charts保存为图片
    function SaveChartsPic() {
        //var chartExportUrl = '/lang/EchartTest/Export';
        var picBase64Info = myChart.getDataURL();//获取echarts图的base64编码,为png格式。
        $.ajax({
            url: "/ReportForms/Export",
            data: { base64Info: picBase64Info, fileType: 'png' },
            type: "Post",
            async: false,
            dataType: "json",
            success: function (data) {
                //如果成功,记录图片的地址
                ) {
                    $('#img_Charts').attr('src', data.imgUrl);
                }
                    //如果失败,弹出提示
                else {
                    alert(data.Message);
                }
            },
        })
    }

3.2.c#进行保存图片

        /// <summary>
        /// 保存图片
        /// </summary>
        /// <param name="base64Info"></param>
        /// <param name="fileType">保存的图片类型</param>
        /// <returns></returns>
        [HttpPost]
        public ActionResult Export(string base64Info, string fileType)
        {
            Result result = new Result();
            try
            {
                string[] arr = base64Info.Split(new string[] { "base64," }, StringSplitOptions.RemoveEmptyEntries);
                ]);
                string path = AppDomain.CurrentDomain.BaseDirectory + chartsPath;
                //string path = Server.MapPath("/Resoucrces/File/");
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                //确保图片名称的唯一性
                Guid chartsID = Guid.NewGuid();
                //string filename = DateTime.Now.ToFileTime() + "." + fileType;
                string filename = chartsID + "." + fileType;
                string savePath = path + filename;

                FileStream fs = System.IO.File.Create(savePath);
                fs.Write(byteArray, , byteArray.Length);
                fs.Close();

                result.code = ;
                result.message = "保存图片成功";

                result.imgUrl = savePath;
            }
            catch (Exception ex)
            {
                result.code = -;
                result.message = "引发异常";
            }
            return Json(result, JsonRequestBehavior.AllowGet);
        }

让后把图片对应的div放进导出div中调整样式即可进行导出

如图:

jquery插件导出word:jquery.wordexport.js的更多相关文章

  1. 转 jquery插件--241个jquery插件—jquery插件大全

    241个jquery插件—jquery插件大全 jquery插件jqueryautocompleteajaxjavascriptcoldfusion jQuery由美国人John Resig创建,至今 ...

  2. 【jQuery插件】用jQuery Masonry快速构建一个pinterest网站布局(转)

    [jQuery插件]用jQuery Masonry快速构建一个pinterest网站布局 时间:2011年03月21日作者:愚人码头查看次数:29,744 views评论次数:25条评论 前段时间领导 ...

  3. jquery插件导出excel和pdf(解决中文乱码问题)

    参考文件:http://jackyrong.iteye.com/blog/2169683 https://my.oschina.net/aruan/blog/418980 https://segmen ...

  4. JQUERY插件学习之jQuery UI

    jQuery UI:http://jqueryui.com/ jQuery UI介绍: jQuery UI 是以 jQuery 为基础的开源 JavaScript 网页用户界面代码库.包含底层用户交互 ...

  5. 自己动手开发jQuery插件全面解析 jquery插件开发方法

    jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级 ...

  6. 网页内容导出word/excel的js代码

    IE设置: 工具-> Internet选项-> 安全->自定义级别-> 对没有标记安全级别的ActiveX控件进行初始化  设为启用! 1.导出word //指定区域导出到Wo ...

  7. jQuery插件之上传文件ajaxfileupload.js源码与使用

    在网页应用中,一般会用到上传文件或者图片什么的到服务器,那么可以用ajaxfileupload.js,但是在使用ajaxfileupload.js时候,当服务器返回的json带有&符号的时候, ...

  8. jQuery插件:图片放大镜--jQuery Zoom

    本文转载于http://blog.csdn.net/xinhaozheng/article/details/4085644, 这是一款非常不错的给图片添加放大镜效果,可以应用在诸如zen cart,m ...

  9. 多日期选择jQuery插件 MultiDatesPicker for jQuery UI

    Multiple-Dates-Picker-for-jQuery-UI是一个多日期选择的jquery控件.   GIT源码: https://github.com/dubrox/Multiple-Da ...

随机推荐

  1. 用MVC5+EF6+WebApi 做一个考试功能(六) 仓储模式 打造EF通用仓储类

    前言 年底工作比较忙,年度总结还没写,项目要上线,回老家过年各种准备.尤其是给长辈给侄子侄女准备礼物头都大了. 原来想年前先出一版能用的,我看有点悬了,尽量先把大体功能弄出来,扔掉一些,保证能考试,然 ...

  2. kubenetes--Namespace命名空间

    Namespace(命名空间)是kubernetes系统中的另一个重要的概念,通过将系统内部的对象“分配”到不同的Namespace中,形成逻辑上分组的不同项目.小组或用户组,便于不同的分组在共享使用 ...

  3. Commons FileUpload文件上传组件

    Java实现的文件上传组件有好几种,其中最为“官方”的要数Apache Commons库中的FileUpload了吧. 页面 <form method="POST" enct ...

  4. CentOS更改ssh端口

    https://blog.csdn.net/lukaixiao/article/details/74852375  来源处处. 注意!这里的Centos版本是7 step1 修改SELinux ech ...

  5. C++的访问关系

    1.C++的访问关系

  6. rocketmq学习

    官网地址 安装name server和broker git clone https://github.com/apache/incubator-rocketmq.git cd incubator-ro ...

  7. Sticky Fingure安装教程

    作者:小离 官方对应Sticky Finger Kali-Pi 的介绍: Sticky Fingers Kali-Pi – The pocket size, finger friendly, lean ...

  8. 聊聊并发(三)Java线程池的分析和使用

    1.    引言 合理利用线程池能够带来三个好处.第一:降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗.第二:提高响应速度.当任务到达时,任务可以不需要的等到线程创建就能立即执行. ...

  9. avalon的使用与总结

    avalon是前端MVVM框架,将所有前端代码彻底分成两部分,视图的处理通过绑定实现(angular有个更炫酷的名词叫指令),业务逻辑则集中在一个个叫VM的对象中处理.我们只要操作VM的数据,它就自然 ...

  10. Alamofire源码导读二:发起请求及内部加锁的逻辑

    以创建一个 DataRequest 为例子  发起请求 创建 SessionManager 顺带也创建了一个 SessionDelegate 持有一个urlSession,持有一个串行的 Dispa ...