AngularJs导出数据到Excel的示例代码


Posted in Javascript onAugust 11, 2017

公司一个新的需求导出Exce表格,研究了一下,最后终于实现,分享给大家。

1 使用FileSaver

第一次采用FileSaver.js 由于刚开始导致导出一片空白,还只能抓取网页里面的表格地址:https://github.com/eligrey/FileSaver.js

HTML

<div id="exportable">
  <table width="100%">
    <thead>
      <tr>
        <th>Name</th>
        <th>Email</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>小明</td>
        <td>dsds@163.com</td>
      </tr>
    </tbody>
  </table>
</div>

js部分

var blob = new Blob([document.getElementById('exportable').innerHTML], {
    type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"
  });
  saveAs(blob, "日记账.xls");
};

2 使用 alasql

使用alasql的好处就是可以在数据层面去组织结构

官网地址:http://alasql.org/

js部分

\\ angular 需要导入xlsx.core.min.js alasql.min.js
\\ 文件结构 
 var arr = [
      {
        '收入':1,
        '支出':2,
        '结存':3
      },
      {
        '收入':4,
        '支出':5,
        '结存':6
      }
    ]

\\ 生成 excel 文件
alasql('SELECT * INTO XLSX("日记账.xlsx",{headers:true}) FROM ?',[arr]);

我优化的版本

// 导出excel

  $scope.exportToExcel=function(){
    var data = angular.copy($scope.pageData.list)
    var arr = [];
    var type = null;
    var amountIN = 0;
    var amountOUT = 0;
    angular.forEach(data,function (item) {
      // 兑付情况
      if(item.isHappened){
        type = '未兑付'
      }else{
        type = '已兑付'
      }
      // 收入
      if(item.itemModel=='INCOME'){
        amountIN = item.amount
      }
      // 支出
      if(item.itemModel=='OUTCOME'){
        amountOUT = item.amount
      }
      arr.push({
        '兑付情况':type,
        '合同':item.keyId,
        '收付日期':$filter('date')(item.updateTime,'yyyy-MM-dd'),
        '科目':item.itemType.value,
        '收入':$filter('number')(amountIN,2),
        '支出':$filter('number')(amountOUT,2),
        '结存':$filter('number')(item.balance,2)
      })
    })
    if(arr.length < 1){
      ToasterTool.error('暂无数据,导出失败!');
    }else{
      // alasql('SELECT * INTO XLSX("日记账.xlsx",{headers:true}) FROM ?',[arr]);
      
      alasql.promise('SELECT * INTO XLSX("日记账-'+ DateTool.format(new Date(),'yyyy-MM-dd HH:mm:ss') + "-"+ $scope.loginUser.userName +'.xlsx",{headers:true}) FROM ?',[arr])
        .then(function (data) {
          if(data == 1){
            $timeout(function(){
              ToasterTool.success('数据导出成功!')
            })

          }
        })
    }
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ExtJs grid行 右键菜单的两种方法
Jun 19 Javascript
Extjs4 类的定义和扩展实例
Jun 28 Javascript
jquery全选checkBox功能实现代码(取消全选功能)
Dec 10 Javascript
JavaScript通过正则表达式实现表单验证电话号码
Mar 07 Javascript
js实现禁止中文输入的方法
Jan 14 Javascript
基于JS实现PHP的sprintf函数实例
Nov 14 Javascript
javascript字符串函数汇总
Dec 06 Javascript
JQuery插件Marquee.js实现无缝滚动效果
Apr 26 Javascript
第八篇Bootstrap下拉菜单实例代码
Jun 21 Javascript
微信小程序实现底部导航
Nov 05 Javascript
原生JS封装拖动验证滑块的实现代码示例
Jun 01 Javascript
jquery简易手风琴插件的封装
Oct 13 jQuery
Vue 表单控件绑定的实现示例
Aug 11 #Javascript
Angular4实现动态添加删除表单输入框功能
Aug 11 #Javascript
node中使用es5/6以及支持性与性能对比
Aug 11 #Javascript
ionic2屏幕适配实现适配手机、平板等设备的示例代码
Aug 11 #Javascript
JSON对象转化为字符串详解
Aug 11 #Javascript
JS中Swiper的使用和轮播图效果
Aug 11 #Javascript
移动端触摸滑动插件swiper使用方法详解
Aug 11 #Javascript
You might like
php学习之 循环结构实现代码
2011/06/09 PHP
php中常用的预定义变量小结
2012/05/09 PHP
php环境下利用session防止页面重复刷新的具体实现
2014/01/09 PHP
PHP基于CURL进行POST数据上传实例
2014/11/10 PHP
PHP的文件操作与算法实现的面试题示例
2015/08/10 PHP
PHP学习记录之常用的魔术常量详解
2019/12/12 PHP
js 在定义的时候立即执行的函数表达式(function)写法
2013/01/16 Javascript
让低版本浏览器支持input的placeholder属性(js方法)
2013/04/03 Javascript
用js判断是否为360浏览器的实现代码
2015/01/15 Javascript
jQuery基础的工厂函数以及定时器的经典实例分析
2016/05/20 Javascript
详解Vue打包优化之code spliting
2018/04/09 Javascript
vue+element的表格实现批量删除功能示例代码
2018/08/17 Javascript
脚手架vue-cli工程webpack的作用和特点
2018/09/29 Javascript
vue中导出Excel表格的实现代码
2018/10/18 Javascript
mock.js模拟数据实现前后端分离
2019/07/24 Javascript
vue 解决computed修改data数据的问题
2019/11/06 Javascript
原生js实现ajax请求和JSONP跨域请求操作示例
2020/03/14 Javascript
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
Python的网络编程库Gevent的安装及使用技巧
2016/06/24 Python
Python正则表达式如何进行字符串替换实例
2016/12/28 Python
详解使用python的logging模块在stdout输出的两种方法
2017/05/17 Python
Python Multiprocessing多进程 使用tqdm显示进度条的实现
2019/08/13 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
中国京东和泰国中央集团合资的网站:JD CENTRAL
2020/08/22 全球购物
Linux上比较文件的命令都有哪些
2013/09/28 面试题
业务经理的岗位职责
2013/11/16 职场文书
电厂厂长岗位职责
2014/01/02 职场文书
资源工程专业毕业生求职信
2014/02/27 职场文书
留守儿童工作方案
2014/06/02 职场文书
邀请函样本
2015/02/02 职场文书
小班教师个人总结
2015/02/05 职场文书
2015年度党员个人总结
2015/02/14 职场文书
幼儿教师师德师风自我评价
2015/03/05 职场文书
自主招生自荐信格式范文
2015/03/25 职场文书
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python
MySQL系列之二 多实例配置
2021/07/02 MySQL