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 相关文章推荐
按下Enter焦点移至下一个控件的实现js代码
Dec 11 Javascript
JavaScript检查弹出窗口是否被阻拦的方法技巧
Mar 13 Javascript
JavaScript从数组中删除指定值元素的方法
Mar 18 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
Apr 16 Javascript
js实现前端分页页码管理
Jan 06 Javascript
原生Javascript插件开发实践
Jan 09 Javascript
BootStrap中的Fontawesome 图标
May 25 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
Jul 11 Javascript
vue addRoutes实现动态权限路由菜单的示例
May 15 Javascript
vue-simple-uploader上传成功之后的response获取代码
Sep 07 Javascript
vue 获取到数据但却渲染不到页面上的解决方法
Nov 19 Vue.js
JS前端使用Canvas快速实现手势解锁特效
Sep 23 Javascript
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实现多服务器session共享之NFS共享的方法
2007/03/16 PHP
浅析PHP程序设计中的MVC编程思想
2014/07/28 PHP
php使用PDO操作MySQL数据库实例
2014/12/30 PHP
PHP实现多图上传和单图上传功能
2018/05/17 PHP
JavaScript 字符串乘法
2009/08/20 Javascript
JS实现在Repeater控件中创建可隐藏区域的代码
2010/09/16 Javascript
基于jquery自己写tab滑动门(通用版)
2012/10/30 Javascript
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
jQuery中live()方法用法实例
2015/01/19 Javascript
JS实现判断碰撞的方法
2015/02/11 Javascript
jquery图片放大镜效果
2017/06/23 jQuery
vue router总结 $router和$route及router与 router与route区别
2019/07/05 Javascript
vue项目中使用rem,在入口文件添加内容操作
2020/11/11 Javascript
JavaScript实现alert弹框效果
2020/11/19 Javascript
[03:48]2014DOTA2 TI专访71DK夺冠不靠小组赛高排名
2014/07/11 DOTA
python遍历文件夹并删除特定格式文件的示例
2014/03/05 Python
python网络编程学习笔记(六):Web客户端访问
2014/06/09 Python
Python基于PycURL自动处理cookie的方法
2015/07/25 Python
Python矩阵常见运算操作实例总结
2017/09/29 Python
简述:我为什么选择Python而不是Matlab和R语言
2017/11/14 Python
PyCharm代码回滚,恢复历史版本的解决方法
2018/10/22 Python
Python openpyxl模块实现excel读写操作
2020/06/30 Python
Python接口自动化测试的实现
2020/08/28 Python
如何将Pycharm中调整字体大小的方式设置为&quot;ctrl+鼠标滚轮上下滑&quot;
2020/11/17 Python
HTML5中input输入框默认提示文字向左向右移动的示例代码
2020/09/10 HTML / CSS
Html5移动端网页端适配(js+rem)
2021/02/03 HTML / CSS
澳大利亚拥有最佳跳伞降落点和最好服务的跳伞项目运营商:Skydive Australia
2018/03/05 全球购物
编辑个人求职信范文
2013/09/21 职场文书
新学期开学寄语
2014/01/18 职场文书
社区党员先进事迹
2014/01/22 职场文书
卫生标语大全
2014/06/21 职场文书
关于晚自习早退的检讨书
2014/09/13 职场文书
公司向个人借款协议书范本
2014/10/09 职场文书
2016年记者节感言
2015/12/08 职场文书
如何书写邀请函?
2019/06/24 职场文书
一文搞懂Golang 时间和日期相关函数
2021/12/06 Golang