2008-12-02 4 views
39

Existe-t-il un moyen de générer Excel/CSV via Javascript? comment générer Excel via Javascript

+2

Vous pouvez générer un téléchargement CSV à partir Javascript HTML 5 dans certains navigateurs: voir réponse acceptée à http://stackoverflow.com/questions/17836273/directement-sortie-javascript-calculs-comme-csv-pour-téléchargement-sans-autre-serv/17836529? noredirect = 1 # comment26036496_17836529 – Paul

Répondre

3

Créez une méthode de publication AJAX qui écrit un fichier CSV sur votre serveur Web et renvoie l'URL. Définissez un IFrame caché dans le navigateur à l'emplacement du fichier CSV sur le serveur.

Votre utilisateur recevra alors le lien de téléchargement CSV.

+4

Un peu stupide cependant - transmettre des données au serveur juste pour qu'il puisse servez-le directement à l'utilisateur. En outre, le XLS généré peut être plutôt important. (peut-être c'est pourquoi l'auteur veut le générer côté client?) Peut-être alors il est préférable de générer le serveur XLS aussi? –

-2

Il me semble être beaucoup plus facile à faire côté serveur. Mais je suppose que vous avez vos raisons. En outre, en tant que notes gmc, supprimez Excel et générez des fichiers CSV à la place. Cela a le bonus supplémentaire d'être utile pour ceux de vos utilisateurs qui n'ont pas Excel installé.

22

Si vous pouvez générer le fichier Excel sur le serveur, c'est probablement le meilleur moyen. Avec Excel, vous pouvez ajouter une mise en forme et améliorer la sortie. Plusieurs options Excel ont déjà été mentionnées. Si vous avez un backend PHP, vous pouvez envisager phpExcel.

Si vous essayez de tout faire sur le client en javascript, je ne pense pas que Excel est une option. Vous pouvez créer un fichier CSV et créer une URL de données pour permettre à l'utilisateur de le télécharger.

J'ai créé un jsFiddle pour démontrer: http://jsfiddle.net/5KRf6/3/

Ce javascript (en supposant que vous utilisez jQuery) prendra les valeurs des boîtes d'entrée dans une table et construire une chaîne au format CSV:

var csv = ""; 
$("table").find("tr").each(function() { 
    var sep = ""; 
    $(this).find("input").each(function() { 
     csv += sep + $(this).val(); 
     sep = ","; 
    }); 
    csv += "\n"; 
}); 

Si vous le souhaitez, vous pouvez déposer les données dans une balise sur la page (dans mon cas une étiquette avec un identifiant de « csv »):

$("#csv").text(csv); 

vous peut générer une URL à ce texte avec ce code:

window.URL = window.URL || window.webkiURL; 
var blob = new Blob([csv]); 
var blobURL = window.URL.createObjectURL(blob); 

Enfin, cela va ajouter un lien pour télécharger les données:

$("#downloadLink").html(""); 
$("<a></a>"). 
attr("href", blobURL). 
attr("download", "data.csv"). 
text("Download Data"). 
appendTo('#downloadLink'); 
+0

bonne réponse, +1 – SpringLearner

0

Pour répondre à votre question avec un exemple de travail:

<script type="text/javascript"> 
function DownloadJSON2CSV(objArray) 
{ 
    var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray; 

    var str = ''; 

    for (var i = 0; i < array.length; i++) { 
     var line = new Array(); 

     for (var index in array[i]) { 
      line.push('"' + array[i][index] + '"'); 
     } 

     str += line.join(';'); 
     str += '\r\n'; 
    } 
    window.open("data:text/csv;charset=utf-8," + encodeURIComponent(str)); 
} 
</script> 
+0

Le seul inconvénient est que vous ne pouvez pas décider quel est le fichier appelé. Vous devrez compter sur l'utilisateur pour l'enregistrer en tant que * .csv, s'ils veulent l'ouvrir facilement. – Fireworm

37

Il existe un projet intéressant sur github appelé Excel Builder (.js) qui offre un moyen côté client de télécharger Excel xlsx et inclut des options pour le formatage de la feuille de calcul Excel.

Vous pouvez rencontrer des problèmes de compatibilité avec le navigateur et Excel en utilisant cette bibliothèque, mais dans de bonnes conditions, cela peut être très utile.

Les démos semblent prometteuses.
http://excelbuilderjs.com/index.html

Un autre projet github avec moins d'options Excel, mais moins de soucis au sujet des problèmes de compatibilité Excel peuvent être trouvés ici: ExcellentExport.js
https://github.com/jmaister/excellentexport

Si vous utilisez AngularJS, il y a ng-csv:
a "Directive simple qui transforme les tableaux et les objets en fichiers CSV téléchargeables".

+7

En 2015, il y a plus de bibliothèques comme [ng-xlsx] (https://libraries.io/bower/angular-xlsx) et [js-xlsx] (https://libraries.io/bower/js-xlsx) –

+3

En fin 2016 il y a une très bonne bibliothèque https://github.com/guyonroche/exceljs (j'ai essayé Excel Builder mais il y a vraiment un problème pendant que vous essayez d'enregistrer votre fichier) –

5

La même réponse a été publiée here.

Link pour working example

var sheet_1_data = [{Col_One:1, Col_Two:11}, {Col_One:2, Col_Two:22}]; 
var sheet_2_data = [{Col_One:10, Col_Two:110}, {Col_One:20, Col_Two:220}]; 
var opts = [{sheetid:'Sheet One',header:true},{sheetid:'Sheet Two',header:false}]; 
var result = alasql('SELECT * INTO XLSX("sample_file.xlsx",?) FROM ?', [opts,[sheet_1_data ,sheet_2_data]]); 

bibliothèques principales nécessaires -

<script src="http://alasql.org/console/alasql.min.js"></script> 
<script src="http://alasql.org/console/xlsx.core.min.js"></script> 
+0

Hey quelle ligne est de sauver l'excel fichier? Parce que maintenant j'ai un tableau et je voulais écrire le tableau dans la feuille de calcul Excel. – hyperfkcb

+0

@DeniseTan, la fonction de sauvegarde est gérée par 'alasql' qui est déclenchée après la génération du fichier. Vos données doivent être dans un tableau d'objets (voir mon exemple). La clé d'objet est nécessaire pour le nom de colonne défini. Vous pouvez convertir votre tableau en tableau d'objets. Regardez l'exemple [https://stackoverflow.com/questions/20807804/convert-an-array-to-an-array-of-objects]. –

+0

Je vois que je vois. Merci beaucoup!! – hyperfkcb

Questions connexes