angularjs ui-grid 导出表格数据csvExport

ui-grid是angularjs常用的表格插件,不仅可以显示表格数据,还提供了很多其他可选的操作功能。

如果想详细了解ui-gird,附上官网地址,上面也有很多详细的例子:http://ui-grid.info/

这篇重点讲一下怎样导出ui-grid表格中数据,将数据以.csv文件形式导出。

ui-grid基本用法如下:

html:

[html]  view plain  copy
  1.  <body>  
  2.   <span type="button" class="btn btn-default" ng-click="recoedExportAsCsv()">导出</span>  
  3.  <div ng-controller="MyCtrl">  
  4.      <div ui-grid="gridOptions" style="width: 100%; height: 426px;" ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-resize-columns ui-grid-auto-resize class="grid"></div>  
  5.    </div>  
  6.  </body>  

js:

[javascript]  view plain  copy
  1. var app = angular.module('app', ['ngAnimate''ngTouch''ui.grid''ui.grid.selection''ui.grid.exporter']);  
  2.       
  3.    app.controller('MyCtrl', ['$scope''$http'function ($scope, $http) {  
  4.      $scope.gridOptions = {  
  5.        columnDefs: [  
  6.             {   
  7.               field: "serialCode",  
  8.         displayName: "流水号",  
  9.       },  
  10.        {  
  11.          field: "payChannel",  
  12.          displayName: "支付方式",  
  13.        },  
  14.       {  
  15.        field: "payStatus",  
  16.         displayName: "状态",  
  17.        }  
  18.        ],  
  19.    enableSorting: true//是否排序  
  20.    useExternalSorting: false//是否使用自定义排序规则  
  21.    enableGridMenu: false//是否显示grid 菜单  
  22.    enableHorizontalScrollbar: 0, //grid水平滚动条是否显示, 0-不显示  1-显示  
  23.    enableVerticalScrollbar: 0, //grid垂直滚动条是否显示, 0-不显示  1-显示  
  24.   
  25.    //-------- 分页属性 ----------------  
  26.    enablePagination: true//是否分页,默认为true  
  27.    enablePaginationControls: true//使用默认的底部分页  
  28.    paginationPageSizes: [10], //每页显示个数可选项  
  29.    paginationCurrentPage: 1, //当前页码  
  30.    paginationPageSize: 10, //每页显示个数  
  31.    //paginationTemplate:"<div></div>", //自定义底部分页代码  
  32.    totalItems: 0, // 总数量  
  33.    useExternalPagination: true,//是否使用分页按钮  
  34.   
  35.    //----------- 选中 ----------------------  
  36.    enableFooterTotalSelected: true// 是否显示选中的总数,默认为true, 如果显示,showGridFooter 必须为true  
  37.    enableFullRowSelection: true//是否点击行任意位置后选中,默认为false,当为true时,checkbox可以显示但是不可选中  
  38.    enableRowHeaderSelection: true//是否显示选中checkbox框 ,默认为true  
  39.    enableRowSelection: true// 行选择是否可用,默认为true;  
  40.    enableSelectAll: true// 选择所有checkbox是否可用,默认为true;  
  41.    enableSelectionBatchEvent: true//默认true  
  42.         
  43.    onRegisterApi: function(gridApi){  
  44.        $scope.gridApi = gridApi;  
  45.    }  
  46.    isRowSelectable: function (row) { //GridRow  
  47.      $scope.index += 1;       
  48.      if ($scope.index == 1) {  
  49.        row.grid.api.selection.selectRow(row.entity); // 选中行  
  50.      }  
  51.    },  
  52.    modifierKeysToMultiSelect: true,//默认false,为true时只能 按ctrl或shift键进行多选, multiSelect 必须为true;  
  53.    multiSelect: true,// 是否可以选择多个,默认为true;  
  54.    noUnselect: false,//默认false,选中后是否可以取消选中  
  55.    selectionRowHeaderWidth: 30,//默认30 ,设置选择列的宽度;  
  56.     //---------------api---------------------  
  57.    onRegisterApi: function (gridApi) {  
  58.    $scope.gridApi = gridApi;  
  59.    //分页按钮事件  
  60.    gridApi.pagination.on.paginationChanged($scope, function (newPage, pageSize) {  
  61.        $scope.index =0;  
  62.        //行选中事件  
  63.       $scope.gridApi.selection.on.rowSelectionChanged($scope, function (row, event) {  
  64.       if (row) {  
  65.          $scope.testRow = row.entity;  
  66.          $scope.isSelected = row.isSelected;  
  67.         }  
  68.      });  
  69.    },  
  70.    exporterCsvColumnSeparator: ',',  
  71.    exporterOlderExcelCompatibility : true,//是否兼容低版本excel  
  72.    exporterHeaderFilterUseName : true,  
  73.    exporterMenuCsv : true,  
  74.    exporterPdfDefaultStyle: {fontSize: 11},  
  75.   
  76. };  
  77.   
  78.    var  myData = [{"serialCode":"11111,"payChannel": "营业厅","payStatus":"1"},                      
  79.                   {"serialCode":"22222,"payChannel": "营业厅","payStatus":"1"},  
  80.                   {"serialCode":"33333,"payChannel": "营业厅","payStatus":"1"}  
  81.                   {"serialCode":"44444,"payChannel": "营业厅","payStatus":"1"}]  
  82.   
  83.    //给你的表格赋值  
  84.    $scope.gridOptions.data = myData;  
  85.   
  86.    //导出你的数据  
  87.    $scope.recoedExportAsCsv = function(){  
  88.      var uiGridExporterService = $scope.gridApi.exporter;  
  89.      uiGridExporterService.csvExport("all","all");  
  90.    }  
  91. }]);  

表格的样子是类似这样的


点击导出,便能导出一个download.csv的文件,里面便是表格中的数据。

过程就是以上这些,接下来说下重点

1.你的module中需要引入ui.grid.exporter.只引入ui.grid是不能导出任何文件的。

2.这里download.csv是系统默认的,你如果不特意设置,就是这个名字了。ui-grid中有一个可以设置.csv文件名字的属性:

[javascript]  view plain  copy
  1. exporterCsvFilename: '你想要的名字.csv',  
把上面这个属性定义到你的$scope.gridOption里面, 就可以生效。

3.如果你的表头,或者标的内容中有中文字符,就可能会遇到中文乱码的可能。

  我导出的时候就遇到这个问题,导出的文件用Notepad打开可以显示中文,用excel打开后全是乱码。这有可能是因为ui-grid不能兼容旧版本的excel.

 在$scope.gridOption中设置如下属性:

[javascript]  view plain  copy
  1. exporterOlderExcelCompatibility : true,  
把属性设置成true就能解决以上乱码问题了。

4.其实ui-grid自带了导出功能,不仅可以导出.csv文件,还可以到出PDF,在菜单栏中可以选择,我的代码把菜单栏隐藏了

[javascript]  view plain  copy
  1. enableGridMenu: false//是否显示grid 菜单  

把这个属性设置成True菜单栏就可以显示了,在表格的右上角。大概是这个样子的


但一般情况为了用户方便操作,都是把导出功能单独写出来。

5.导出方法中有一句话:

[javascript]  view plain  copy
  1. uiGridExporterService.csvExport("all","all");  

这句话的意思是把所有的行和列都导出来。这个参数也可见的VISIBLE,或者已选的SELECTED。具体这个方法怎么用可以去读源码,我也是摸索着写出来的。
源码在介里:
https://github.com/angular-ui/ui-grid/blob/ac1d75e/src/features/exporter/js/exporter.js#L30
csv的导出大概这610行左右,PDF的导出大概在990行左右。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值