2010-07-20 4 views

Répondre

26

Je pense que vous êtes mal compris la réponse à la question que vous avez lié à, il est ce qui suggère que vous utilisez un URI de données pour l'exportation.

Excel est une cible compliquée à atteindre car le format de fichier est lui-même binaire (or OOXML). Si vous voulez juste quelque chose qui ouvre dans Excel alors vous pouvez exporter le CSV plus simple comme un URI de données. Le code suivant est un peu rugueux et prêt et a été testé dans Firefox:

function exportData() { 
    var data = ''; 
    for (var i=1;i<=2;i++) { 
     var sep = ''; 
     for (var j=1;j<=4;j++) { 
      data += sep + document.getElementById(i + '_' + j).value; 
      sep = ','; 
     } 
     data += '\r\n'; 
    } 
    var exportLink = document.createElement('a'); 
    exportLink.setAttribute('href', 'data:text/csv;base64,' + window.btoa(data)); 
    exportLink.appendChild(document.createTextNode('test.csv')); 
    document.getElementById('results').appendChild(exportLink); 
} 

Voici le balisage de la page:

<input type="number" id="1_1" value="2">, 
<input type="number" id="1_2" value="1">, 
<input type="number" id="1_3" value="4">, 
<input type="number" id="1_4" value="3"> 
<br> 
<input type="number" id="2_1" value="1">, 
<input type="number" id="2_2" value="2">, 
<input type="number" id="2_3" value="3">, 
<input type="number" id="2_4" value="4"> 
<br> 
<button onclick="exportData()">Export as CSV</button> 
<div id="results"></div> 

Demo here. Cliquez sur le bouton vous obtenez un lien, cliquez sur le lien et vous obtenez un fichier. Changez les valeurs, cliquez à nouveau sur le lien et vous obtenez un fichier différent. Firefox m'a fait sélectionner Excel à chaque fois pour l'ouvrir mais je ne sais pas si c'est ma configuration ou un problème général.

CSV in Excel 2007 http://www.boogdesign.com/images/external/data-uri-csv.png

Comme je l'ai dit, testé que dans Firefox, et il ne fonctionne que dans les navigateurs qui prennent en charge Data URIs. Vous avez également besoin du window.btoa() function ou implémentez le vôtre base64 encoder.

+0

Intéressant. Lorsque j'ouvre le résultat dans Excel, j'obtiens deux cellules, A1 ('2,1,4,3') et A2 ('1,2,3,4'). Donc, il reconnaît les lignes mais pas les colonnes. Merci pour le début (et vous avez raison sur la question liée, ce n'est pas tout à fait la bonne réponse pour l'exportation) –

+1

@AlexMcp Peut-être que cela dépend de quelle version d'Excel vous utilisez? J'ai ajouté une capture d'écran de ce que je vois dans Excel 2007 – robertc

+0

Wow, c'est tellement bon à savoir à ce sujet. Merci :-) –

2

Je ne connais aucune bibliothèque Javascript capable de créer un fichier Excel. Mais vous pouvez simplement l'exporter en HTML ou CSV - notez que Javascript ne peut pas faire de fichiers (encore), mais le brouillon de HTML s'adresse à ceci: http://www.w3.org/TR/file-writer-api/

Excel est assez bon pour lire des tableaux en HTML, donc vous pouvez Il suffit de le faire et ouvrez le fichier HTML avec Excel.

Vous pouvez créer un fichier à télécharger à l'aide Downloadify: https://github.com/dcneiner/Downloadify

+3

Je pense simplement à copier/coller l'utilisateur. Ce n'est pas un produit commercial, juste un utilitaire, alors peut-être que c'est correct de demander aux gens. J'espérais une API HTML5 Whizbang qui ... Je ne sais pas, fait de la magie ou quelque chose ... –

+0

+ 1 pour demander de la magie :) – technomalogical

+0

Si vous déplacez votre attention vers le côté serveur, vous pouvez produire un type MIME personnalisé de votre choix. CSV est un moyen simple d'exporter des données vers Excel. –