2014-06-08 23 views
5

, ben ben sadece .xls gibi o nesneyi ihraç veya file.i böyle yaklaşımların çok kullanılan .csv istiyorum, benim denetleyicisi bir nesne ettik:Açısal JS - Javascript Nesnesi XLS dosyasına nasıl dışa aktarılır? Aslında

HTML

<script src="https://rawgithub.com/eligrey/FileSaver.js/master/FileSaver.js" type="text/javascript" /> 
<div ng-controller="myCtrl"> 
    <button ng-click="exportData()">Export</button> 
    <br /> 
    <div id="exportable"> 
    <table width="100%"> 
     <thead> 
      <tr> 
       <th>Name</th> 
       <th>Email</th> 
       <th>DoB</th> 
      </tr> 
     </thead> 
     <tbody> 
      <tr ng-repeat="item in items"> 
       <td>{{item.name}}</td> 
       <td>{{item.email}}</td> 
       <td>{{item.dob | date:'MM/dd/yy'}}</td> 
      </tr> 
     </tbody> 
    </table> 
    </div> 
</div> 

JavaScript

function myCtrl($scope) { 
    $scope.exportData = function() { 
     var blob = new Blob([document.getElementById('exportable').innerHTML], { 
      type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8" 
     }); 
     saveAs(blob, "Report.xls"); 
    }; 

    $scope.items = [{ 
     name: "John Smith", 
     email: "[email protected]", 
     dob: "1985-10-10" 
    }, { 
     name: "Jane Smith", 
     email: "[email protected]", 
     dob: "1988-12-22" 
    }, { 
     name: "Jan Smith", 
     email: "[email protected]", 
     dob: "2010-01-02" 
    }, { 
     name: "Jake Smith", 
     email: "[email protected]", 
     dob: "2009-03-21" 
    }, { 
     name: "Josh Smith", 
     email: "[email protected]", 
     dob: "2011-12-12" 
    }, { 
     name: "Jessie Smith", 
     email: "[email protected]", 
     dob: "2004-10-12" 
    }] 
} 

ama bu değil orada sayfalara ayrılmış tables.is doğrudan (bu örnek $ scope.item olarak) nesneleri vermek için herhangi bir şekilde dosya çalışır (xls , csv)?

cevap

13

Evet, XLSX.js kütüphanesi ile Alasql JavaScript kütüphanesi ile size verileri kaydedebilirsiniz.

Birincisi:

  • alasql.min.js
  • xlsx.core.min.js

İkincisi:: yerine exportData iki sayfanıza JavaScript kütüphanesini içerir İşte bir örnek

$scope.exportData = function() { 
     alasql('SELECT * INTO XLSX("john.xlsx",{headers:true}) FROM ?',[$scope.items]); 
    }; 

Üçüncüsü: ile kodunuzda() işlevi CSV dosyaları için - basitçe CSV kullanabilir() fonksiyonu:

alasql('SELECT * INTO CSV("john.csv",{headers:true, separator:";"}) FROM ?',[$scope.items]); 

this example in jsFiddle ile oynayabilirsiniz.

+0

Bu harika bir çözüm, katkısını gerçekten takdir ediyor. Herhangi bir iç nesneyi ve koleksiyonları da ayrıştırmak için basit çözümleriniz var mı? –

+1

Evet. SELECT'e benzer olan SEARCH işlecini deneyebilirsiniz, ancak JSON nesnesinin içinde hareket ettirebilirsiniz (bkz. Https://github.com/agershun/alasql/wiki/Search) – agershun

+0

açmaya çalıştığınızda plunkr xlsx dosyasının bir sorunu vardır. o. – crh225

1

Bir CSV dosyasından memnunsanız, ngCsv modülüne gidiniz. DOM’tan öğe yüklemiyorsunuz ancak bir diziyi doğrudan dışa aktarıyorsunuz. Burada ngCsv örneğini görebilirsiniz.

html:

<h2>Export {{sample}}</h2> 
    <div> 
     <button type="button" ng-csv="getArray" filename="test.csv">Export</button> 
</div> 

ve js:

angular.module('csv', ['ngCsv']); 

function Main($scope) { 
    $scope.sample = "Sample"; 
    $scope.getArray = [{a: 1, b:2}, {a:3, b:4}];        
} 
+0

Evet, tabi. Bu modülü kullandım. ancak hedefim süzülmüş nesneleri doğrudan 'Excel' dosyalarına dışa aktarıyor. – bizzr3

+2

Sorularınızda bir .xls veya .csv dosyasına aktarmanız gerektiğini belirttiniz. Bir diziye her zaman bir filtre uygulayabilirsiniz (.csv hala geçerliyse). – zszep