网站开发进阶(三十一)js如何将html表格导出为excel文件(后记)

时间:2021-07-11 02:52:23

js如何将html表格导出为excel文件(后记)

前言

项目前期做了个导出Excel表格的功能,但是经过测试发现只有在IE上才可以正确实现,在Chrome等浏览器中无法实现导出效果。经过上网搜索,尝试通过插件的形式实现。通过安装ActiveX for Chrome插件(地址栏输入chrome://extensions/ 进入扩展程序安装页面)。

经过测试,选择ActiveX插件的形式并不能解决问题,故弃掷。经过一番网络搜索,查到一个好的方法,其通过FileSaver.js实现浏览器写入文件到本地磁盘。代码如下:

<script>
(function(){
    document.getElementById("saveBtn").onclick = function(event){
        event.preventDefault();
        var BB = self.Blob;
        saveAs(
              new BB(
                  ["\ufeff" + document.getElementById("content").value] //\ufeff防止utf8 bom防止中文乱码
                , {type: "text/plain;charset=utf8"}
            )
            , document.getElementById("filename").value
        );
    };
})();
</script>

按照前面订单打印的思路,在页面中嵌入一隐藏元素,然后获取其内容。隐藏元素代码如下:

<i id="sunny" hidden="hidden">{{querydata}}</i>

获取结果如下:

网站开发进阶(三十一)js如何将html表格导出为excel文件(后记)

接下来需要做的工作解析上面的返回结果,然后拼接成Excel导出方法所需形式。

解析代码如下:

      var content = document.getElementById("sunny").innerHTML;
//        alert(content);
        var contentText = "药品名,药品ID,价格(元),数量(盒),下单时间,订单ID,订单内容,购药者,处方药,药品种类\n";
        var obj = JSON.parse(content); // 由JSON字符串转换为JSON对象
//        alert(obj.length);
        var billDtl = '';
        for(k=0; k<obj.length; k++){
        	var bill = obj[k];
        	var content = '';
        	var index = bill.billContent.indexOf(',');
//        alert(index);
        if(index != -1){
        	   	var contentArray = bill.billContent.split(",");
        	if(contentArray.length > 1){
        	for(j=0; j<contentArray.length-1; j++){
        	content += contentArray[j] + '、';
        	}
        	content += contentArray[j];
        	}
//        alert(content);
        	}
        	billDtl += bill.medname + "," + bill.medid + "," + bill.medprice + "," + bill.sellcnt + "," + bill.tx_time + "," + bill.billid + ","
        	+ content + "," + bill.buy_uid + "," + bill.iscf + "," + bill.medtype + "\n";
        }
        alert(billDtl);

其中主要涉及到

json数组字符串转换为json数组:

var obj = JSON.parse(content); // 由JSON字符串转换为JSON对象

订单内容格式化:

var content = '';

var index = bill.billContent.indexOf(',');

//alert(index);

if(index != -1){

var contentArray = bill.billContent.split(",");

if(contentArray.length > 1){

for(j=0; j<contentArray.length-1; j++){

content += contentArray[j] + '、';

}

content += contentArray[j];

}

//alert(content);

}else{

content = bill.billContent;

}

订单内容拼接:

billDtl += bill.medname + "," + bill.medid + "," + bill.medprice + "," + bill.sellcnt + "," + bill.tx_time + "," + bill.billid + "," + content + ","

+ bill.buy_uid + "," + bill.iscf + "," + bill.medtype + "\n";

至此,Ecxel可实现导出功能,唯一的缺陷就是不存在文件命名,存储位置选择的对话框。

为了解决文件命名、存储位置选择问题,自己不得不放弃原来的导出方法,尝试使用如下方法:

<span style="color:#ff0000;">(function (){
Downloadify.create('downloadify',{
    filename: function(){
      //return document.getElementById('filename').value;
      return "Sunny.csv";
    },
    data: function(){
        var content = document.getElementById("sunny").innerHTML;
//        alert(content);
        var contentText = "药品名,药品ID,价格(元),数量(盒),下单时间,订单ID,订单内容,购药者,处方药,药品种类\n";
        var obj = JSON.parse(content); // 由JSON字符串转换为JSON对象
//        alert(obj.length);
        var billDtl = '';
        for(k=0; k<obj.length; k++){
        	var bill = obj[k];
        	var content = '';
        	var index = bill.billContent.indexOf(',');
//        alert(index);
        if(index != -1){
        	   	var contentArray = bill.billContent.split(",");
        	if(contentArray.length > 1){
        	for(j=0; j<contentArray.length-1; j++){
        	content += contentArray[j] + '、';
        	}
        	content += contentArray[j];
        	}
//        alert(content);
        	}else{
        	content = bill.billContent;
        	}
        	billDtl += bill.medname + "," + bill.medid + "," + bill.medprice + "," + bill.sellcnt + "," + bill.tx_time + "," + bill.billid + ","
        	+ content + "," + bill.buy_uid + "," + bill.iscf + "," + bill.medtype + "\n";
        }
        alert(billDtl);
        return "\ufeff" + contentText + billDtl;
    },
    onComplete: function(){
      alert('保存成功!');
    },
    onCancel: function(){
    },
    onError: function(){
      alert('保存失败!');
    },
    transparent: false,
    swf: 'img/downloadify.swf',
    downloadImage: 'img/download.png',
    width: 100,
    height: 30,
    transparent: true,
    append: false
  });
})();</span>

经过UI的稍微调整,问题总算得以解决。

参考文献

1.http://www.chromi.org/archives/10618

2.http://www.oschina.net/news/16501/new-plugin-make-chrome-support-activex

3.http://zhidao.baidu.com/link?url=-wD7FbuwVMYGGgCr4X65CmL73z7TF53dzYWD2Z1-t1ysM0U2CyyyzSymO43DaAgUpEcJ1zwm_mgT8JdGo26Om2t6h5yWTW0TzPJ3rXjP6rS

4.http://baike.baidu.com/link?url=tXq95A_vT1Ksgruf2wFAxzwzYocQk-UD3YQ6hYVwL1CORcCax7ThRE7jypfkqVEaXQ9wgieKECONqx7tp75SHw2-OJ8v9XYCNcFqGC4j2V3

5.http://my.oschina.net/tongjh/blog/316938

6.http://www.jb51.net/article/43136.htm

7.http://www.ynpxrz.com/n763517c2025.aspx

8.http://www.dreamdu.com/xhtml/tag_param/

有图有真相

网站开发进阶(三十一)js如何将html表格导出为excel文件(后记)

网站开发进阶(三十一)js如何将html表格导出为excel文件(后记)

网站开发进阶(三十一)js如何将html表格导出为excel文件(后记)

美文美图

网站开发进阶(三十一)js如何将html表格导出为excel文件(后记)

网站开发进阶(三十一)js如何将html表格导出为excel文件(后记)的更多相关文章

  1. 网站开发进阶&lpar;二十五&rpar;js如何将html表格导出为excel文件

    js如何将html表格导出为excel文件        赠人玫瑰,手留余香.若您感觉此篇博文对您有用,请花费2秒时间点个赞,您的鼓励是我不断前进的动力,共勉! jsp页面数据导出成excel的方法很 ...

  2. 网站开发进阶&lpar;三十五&rpar;JSP页面中的pageEncoding和contentType两种属性

    JSP页面中的pageEncoding和contentType两种属性 本文介绍了在JSP页面中经常用的两种属性,分别是pageEncoding和contentType,希望对你有帮助,一起来看. 关 ...

  3. 网站开发进阶&lpar;三十八&rpar;Web前端开发规范文档你需要知道的事

    Web前端开发规范文档你需要知道的事 规范目的 为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档. 本规范文档一经确认, 前端开发人员必须按本文档规范进 ...

  4. 网站开发进阶&lpar;十四&rpar;JS实现二维码生成

    JS实现二维码生成 绪 项目开发原语:已然花费半天的时间,仍旧未能将二维码显示在订单中.但是可以在单个页面中显示二维码,结合到angularjs的控制器中就失效了,自己是真的找不到其中的原因了.费解! ...

  5. 网站开发进阶&lpar;十二&rpar;JS实现打印功能&lpar;包括打印预览、打印设置等&rpar;

    JS实现打印功能(包括打印预览.打印设置等) 绪 最近在进行项目开发时,需要实现后台管理端打印功能,遂在网上一阵搜索,搜到了很多相关的文章.其中绝大部分文章都是使用的Lodop5.0(Web打印和套打 ...

  6. 网站开发进阶&lpar;三十七&rpar;JSP页面跳转问题解决

    JSP页面跳转问题解决 PS:本篇博文质量欠佳,仅供个人学习之用. 前言 在做Web开发时,对别人的应用(jsp+servlet)进行服务器部署时出现了页面跳转无效的情况.但是项目在本地未出现此状况. ...

  7. 网站开发进阶&lpar;三十六&rpar;String&period;getBytes&lpar;&rpar;方法中的中文编码问题

    String.getBytes()方法中的中文编码问题 String的getBytes()方法是得到一个系统默认的编码格式的字节数组. getBytes("utf-8")得到一个U ...

  8. 网站开发进阶&lpar;三十四&rpar;编码中的setCharacterEncoding 理解

    编码中的setCharacterEncoding 理解 1.pageEncoding="UTF-8"的作用是设置JSP编译成Servlet时使用的编码. 2.contentType ...

  9. 网站开发进阶&lpar;三十&rpar;HTML5--本地存储Web Storage

    HTML5--本地存储Web Storage Web Storage功能,顾名思义,就是在Web上针对客户端本地储存数据的功能,具体来说Web Storage分为两种: sessionStorage: ...

随机推荐

  1. healthMonitoring与运行状况监视

    配置针对应用程序的运行状况监视的一个服务 配置节内容比以往的较为复杂,如下 <healthMonitoring Enabled="true|false" heartbeatI ...

  2. JAVA多线程超时加载当网页图片

    先上图: 这一次没有采取正则匹配,而采取了最简单的java分割和替代方法进行筛选图片 它能够筛选如下的图片并保存到指定的文件夹 如: “http://xxxx/xxxx/xxx.jpg” 'http: ...

  3. 锋利的js前端分页之jQuery

    大家在作分页时,多数是在后台返回一个导航条的html字符串,其实在前端用js也很好实现. 调用pager方法,输入参数,会返回一个导航条的html字符串.方法的内部比较简单. /** * pageSi ...

  4. OD使用教程

    OD使用教程: 跳转指令.满足才能跳转成功  

  5. 使用 nginx &plus; thin 的配置启动 rails server

    http://www.iwangzheng.com 在大师的指导下配置了新的服务器的nginx,通过top命令查看了服务器是8个cpu的,所以起了8个端口,把它们都映射到一个总的端口3600上,需要在 ...

  6. Mac OS X Server 安装与应用

    Mac OS X Server 安装与应用 Mac OS X Server是苹果电脑公司新一代服务器软件.专为OS X和iOS设备.Mac OS X提供服务,现在支持Mavericks,能够轻松共享文 ...

  7. jquery插件下载地址

    以下是本人收集的jquery插件下载地址: .............版本自行选择. jquery官网:http://jquery.com/ jquery.validate.js 官网下载地址:htt ...

  8. Mock测试框架

    一.前言 使用Mock框架进行单元测试,能够使用当前系统已经开发的接口方法模拟数据.(未写完,慢慢完善) 二.例子 1.引用Moq

  9. ubuntu 14&period;04—解决软件中心进度条卡死的问题

    软件中心下载安装软件进度条卡住了,这时候解决方法为: 先解锁: sudo rm -rf /var/lib/dpkg/lock 如果此时开启软件中心,发现进度还在, 那么我们需要找到相关的进程关闭他,使 ...

  10. Android应用程序更新并下载

    创建一个新类,名为UpdateManager,代码如下: package com.af.service; import java.io.BufferedReader; import java.io.F ...