Exporter au format csv en jQuery
Je suis de la génération dynamique d'un div qui est comme :
<div id='PrintDiv'>
<table id="mainTable">
<tr>
<td>
Col1
</td>
<td>
Col2
</td>
<td>
Col3
</td>
</tr>
<tr>
<td>
Val1
</td>
<td>
Val2
</td>
<td>
Val3
</td>
</tr>
<tr>
<td>
Val11
</td>
<td>
Val22
</td>
<td>
Val33
</td>
</tr>
<tr>
<td>
Val111
</td>
<td>
Val222
</td>
<td>
Val333
</td>
</tr>
</table>
</div>
Et il y a beaucoup plus d'éléments sur la page.
Maintenant, comment puis-je obtenir un fichier csv comme ceci :
Col1,Col2,Col3
Val1,Val2,Val3
Val11,Val22,Val33
Val111,Val222,Val333
à l'aide de jQuery ?
besoin d'un fichier enregistrer dailog boîte de trop,comme ceci :
Grâce.
- À la recherche pour le côté client de la solution & nécessité d'éviter un appel de serveur
- excel peut effectivement importer au format html que vous l'avez
- Plusieurs bibliothèques JavaScript va le faire, y compris Table
- Serait "copier le tableau dans le presse-papiers au format CSV" être une option? Si oui, alors vous pouvez utiliser du javascript/jQuery pour recueillir les données à partir de votre table & format CSV (dans votre cas), puis utiliser les ZeroClipboard bibliothèque js pour copier les données mises en forme dans le presse-papiers (ce plugin est utilisé par github & d'autres de renommée sites web).
- Exemple pour un "copier le tableau dans le presse-papiers au format CSV" jsfiddle.net/h2Kq6/
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire dans le côté client seulement, dans le navigateur qui acceptent Les Données Uri:
Dans votre exemple, les Données de l'URI doit être:
Vous pouvez appeler cette URI par:
window.open
window.location
Pour tester, il suffit de copier les Uri ci-dessus et collez-le dans votre barre d'adresse du navigateur. Ou test de l'ancre ci-dessous dans une page HTML:
À la création du contenu, d'obtenir les valeurs de la table, vous pouvez utiliser table2CSV et à faire:
La plupart, si pas tous, les versions d'IE ne prennent pas en charge la navigation à une liaison de données, donc un hack doit être mis en œuvre, souvent avec un
iframe
. À l'aide d'uniFrame
combiné avecdocument.execCommand('enregistrer sous'..)
, vous pouvez obtenir un comportement similaire sur les plus utilisées actuellement les versions de IE.window.location
ouwindow.open
il s'enregistre comme "x4ef3.le cadre", et non "abc.csv". Comment puis-je faire enregistrer en tant que ".csv" un fichier?The "data:" URL scheme is only useful for short values. Note that some applications that use URLs may impose a length limit; for example, URLs embedded within <A> anchors in HTML have a length limit determined by the SGML declaration for HTML [RFC1866]. (...)
. De plus, j'ai lu que IE8 limites des Données les Uri à 32 ko pour la sécurité. Mais IE9 ne fonctionne pas. Ainsi, il semble exister une application imposition et ne fonctionne pas la même dans tous les navigateurs.tabletoCsv
pas de travail aimablement mise à jourC'est ma mise en œuvre (base: https://gist.github.com/3782074):
Utilisation:
HTML:
JS:
Code:
Notes:
ajouté.
Mise à JOUR:
Mon précédent de mise en œuvre a bien fonctionné, mais il n'a pas mis le nom de fichier csv. Le code a été modifié pour utiliser un nom de fichier, mais il demande un < a > élément. Il semble que vous ne pouvez pas générer dynamiquement le < a > élément feu et l'événement "click" (peut-être des raisons de sécurité?).
DÉMO
http://jsfiddle.net/nLj74t0f/
(Malheureusement jsfiddle ne parvient pas à générer le fichier et renvoie une erreur: "veuillez utiliser la demande POST', ne laissez pas cette erreur qui vous empêche de tester ce code dans votre application).
J'ai récemment posté une bibliothèque logicielle libre pour cette: "html5csv.js" -- GitHub
Il est destiné à vous aider à simplifier la création de petites simulateur apps
en Javascript qui pourrait avoir besoin d'importer ou d'exporter des fichiers csv, de manipuler, d'afficher, de modifier
les données, effectuer diverses procédures mathématiques comme montage, etc.
Après le chargement "html5csv.js" le problème de la numérisation d'un tableau et la création d'un fichier CSV est un one-liner:
Ici est un JSFiddle démonstration de votre exemple avec ce code.
En interne, pour Firefox/Chrome c'est une base de données d'URL orientée solution, similaire à celui proposé par @italo, @lepe, et @adeneo (sur une autre question). Pour IE
La
CSV.begin()
appel configure le système pour lire les données dans un tableau interne. Cette extraction se produit alors. Puis le.download()
génère de données à l'URL d'un lien interne et de clics avec un lien-clicker. Celui-ci pousse un fichier à l'utilisateur final.Selon caniuse IE10 ne prend pas en charge
<a download=...>
. Donc, pour IE ma bibliothèque appelsnavigator.msSaveBlob()
en interne, comme suggéré par @Manu SharmaVoici deux SOLUTIONS de contournement pour le problème de déclenchement de téléchargements à partir du client seulement. Plus tard, des navigateurs, vous devriez regarder "blob"
1. Faites glisser et déposez le tableau
Saviez-vous que vous pouvez simplement faire GLISSER votre tableau dans excel?
Ici est de savoir comment choisir la table de couper et coller ou glisser
Sélectionnez une table complète avec le Javascript (pour être copié dans le presse-papiers)
2. créer un popup page à partir de votre div
Bien qu'il pas produire une boîte de dialogue enregistrer, si le résultant popup est enregistré avec l'extension .csv, il sera traité correctement par Excel.
La chaîne pourrait être
w.document.write("row1.1\trow1.2\trow1.3\nrow2.1\trow2.2\trow2.3");
par exemple, délimité par des tabulations avec un saut de ligne pour les lignes.
Il y a des plugins qui vont créer la chaîne pour vous - comme http://plugins.jquery.com/project/table2csv
AVERTISSEMENT: ce sont des solutions de contournement, et ne répond pas entièrement à la question qui est actuellement a la réponse pour la plupart des navigateurs: pas possible sur le client seulement
a
avecdownload="myfile.csv"
ettype="text/csv"
attributs, de coder les données au format CSV, en base64 à l'aide debtoa
et définir lasrc
attribut"data:text/csv;base64,P2ZyB4bW.....xucz0==="
, ajouter lea
élément du DOM (cacher) et cliquez dessus, il va télécharger le fichier.En utilisant jQuery, vous ne pouvez pas éviter d'appel de serveur.
Cependant, pour parvenir à ce résultat, je suis en utilisant Downloadify, ce qui me permet d'enregistrer des fichiers sans avoir à faire un autre appel de serveur. Faire cela réduit la charge du serveur et fait une bonne expérience utilisateur.
Pour obtenir un bon CSV vous avez juste à prendre toutes les balises inutiles et de mettre un ',' entre les données.
Vous ne pouvez pas éviter un appel de serveur ici, JavaScript ne peut tout simplement pas (pour des raisons de sécurité) d'enregistrer un fichier pour le fichier de l'utilisateur du système. Vous devrez fournir vos données sur le serveur et d'avoir il envoyer le
.csv
comme un lien ou une pièce jointe directement.HTML5 a certains capacité de le faire (si l'enregistrement n'est vraiment pas spécifié - juste un cas d'utilisation, vous pouvez lire le fichier si vous voulez), mais il n'y a pas de solution de navigateur en place maintenant.
Juste essayer le codage suivant...très simple pour générer CSV avec les valeurs des Tableaux HTML. Pas de problèmes de navigateur viendra