18041 sujets
Questions générales et questions de débutants
Ok
en deux lignes en jquery c'est fait :
par contre je suis pas fan, on a aucun contrôle sur le fichier de sortie.. j'arrive pas à lui donner un nom, j'arrive pas à laisser les bordures d'excel (oui quand j'ouvre le fichier télécharger, aucune bordure, tout blanc....)
en deux lignes en jquery c'est fait :
$(document).ready(function() {
$('#export').click( function() { // Au clic sur un élément
window.open('data:application/vnd.ms-excel,' + escape($('#id_table_result').html()));
e.preventDefault();
});
})
par contre je suis pas fan, on a aucun contrôle sur le fichier de sortie.. j'arrive pas à lui donner un nom, j'arrive pas à laisser les bordures d'excel (oui quand j'ouvre le fichier télécharger, aucune bordure, tout blanc....)
Salut Jencal,
Mis à part les cookies, le JS et par conséquent Jquery ne peut pas créer un fichier. Tu dois passer par un langage serveur.
Le plus courant est d'utiliser le CSV. Ce type d'export permet de renvoyer dans un fichier "texte", toutes les données d'une table par exemple.
Si ce sont de véritables feuilles de calcul que tu dois exporter, il n'y a pas beaucoup de solutions :
Tu as en natif l'objet COM de php. Le gros avantages de cet objet, est que tu peux exporter des données vers Word, Excel, etc. L'inconvénient est que ce n'est pas simple. Il me semble que le VB sera a aborder.
Dans les autres langages tel que le Python par exemple, je suis pratiquement sûr qu'il y ait plus de solutions et facilité. Il y a un bon exemple ici : http://www.portailsig.org/content/python-lire-et-ecrire-des-fichiers-microsoft-excel-application-quantum-gis
Avec Pear, il y a une librairie à ce sujet. Cependant, elle n'est plus maintenue. Je pense tout de même qu'elle doit fonctionner. A voir et à essayer au cas où.
Sinon, je garde le meilleur pour la fin ou la faim (oui oui je suis sadique, je garde le suspens). Pour php, il y a phpExcel. Il y a de la bonne doc un peu partout. Il me semble qu'il y a un bon tuto sur Developpez.com. Fait une petite recherche à ce sujet. De mémoire, c'est pas sorcier. Cet hiver, il me semble que j'avais utilisé cette librairie pour aider un collègue de boulot. Lui aussi, il pensait que le JS créait à la voler des fichiers excel. De mémoire, il avait essayer avec jquery dataTable.
Mis à part les cookies, le JS et par conséquent Jquery ne peut pas créer un fichier. Tu dois passer par un langage serveur.
Le plus courant est d'utiliser le CSV. Ce type d'export permet de renvoyer dans un fichier "texte", toutes les données d'une table par exemple.
Si ce sont de véritables feuilles de calcul que tu dois exporter, il n'y a pas beaucoup de solutions :
Tu as en natif l'objet COM de php. Le gros avantages de cet objet, est que tu peux exporter des données vers Word, Excel, etc. L'inconvénient est que ce n'est pas simple. Il me semble que le VB sera a aborder.
Dans les autres langages tel que le Python par exemple, je suis pratiquement sûr qu'il y ait plus de solutions et facilité. Il y a un bon exemple ici : http://www.portailsig.org/content/python-lire-et-ecrire-des-fichiers-microsoft-excel-application-quantum-gis
Avec Pear, il y a une librairie à ce sujet. Cependant, elle n'est plus maintenue. Je pense tout de même qu'elle doit fonctionner. A voir et à essayer au cas où.
Sinon, je garde le meilleur pour la fin ou la faim (oui oui je suis sadique, je garde le suspens). Pour php, il y a phpExcel. Il y a de la bonne doc un peu partout. Il me semble qu'il y a un bon tuto sur Developpez.com. Fait une petite recherche à ce sujet. De mémoire, c'est pas sorcier. Cet hiver, il me semble que j'avais utilisé cette librairie pour aider un collègue de boulot. Lui aussi, il pensait que le JS créait à la voler des fichiers excel. De mémoire, il avait essayer avec jquery dataTable.
Super réponse !
Python, Pearl et VB, je peux oublier mais je garde tes conseils en tête
Par contre PhpExcel est très intéressant, je pense partir de ce coté là !
Il faudrait que j'envoie ma <table> en ajax, et le construire avec php, pour l'enregistrer.
P.S :
Je me suis sans doute mal exprimer, mais le fichier excel doit être créer COTER CLIENT, sur le poste de l'utilisateur hein.
Python, Pearl et VB, je peux oublier mais je garde tes conseils en tête
Par contre PhpExcel est très intéressant, je pense partir de ce coté là !
Il faudrait que j'envoie ma <table> en ajax, et le construire avec php, pour l'enregistrer.
P.S :
Je me suis sans doute mal exprimer, mais le fichier excel doit être créer COTER CLIENT, sur le poste de l'utilisateur hein.
Ouép,
Rien de compliquer, en faite j'ai un tableau avec des données, quand je dis un tableau, je parle d'une <table> HTML. Les utilisateurs veulent avoir la possibilité d'exporter ce tableau dans un fichier excel pour pouvoir le traiter par la suite plus facilement.
Modifié par JENCAL (22 Jul 2015 - 11:57)
Rien de compliquer, en faite j'ai un tableau avec des données, quand je dis un tableau, je parle d'une <table> HTML. Les utilisateurs veulent avoir la possibilité d'exporter ce tableau dans un fichier excel pour pouvoir le traiter par la suite plus facilement.
Modifié par JENCAL (22 Jul 2015 - 11:57)
http://g-ernaelsten.developpez.com/tutoriels/excel2007/
http://ctd-web.fr/blog/2013/10/04/phpexcel-les-bases/
http://tutoriels.pecaudchristopher.com/Tutoriel_PHPExcel.php
Tu me dois 3 bières bien fraiches
Modifié par CVS (22 Jul 2015 - 14:02)
http://ctd-web.fr/blog/2013/10/04/phpexcel-les-bases/
http://tutoriels.pecaudchristopher.com/Tutoriel_PHPExcel.php
Tu me dois 3 bières bien fraiches
Modifié par CVS (22 Jul 2015 - 14:02)
Bonjour,
aucun rapport avec ta question (fichier Excel) mais si tu veux un genre d'Excel / tableur dans ton navigateur, il existe handsontable. Utilisé de façon industrielle par mon client, c'est assez impressionnant (le poids du script non compressé autant que les fonctionnalités ou la vitesse)
aucun rapport avec ta question (fichier Excel) mais si tu veux un genre d'Excel / tableur dans ton navigateur, il existe handsontable. Utilisé de façon industrielle par mon client, c'est assez impressionnant (le poids du script non compressé autant que les fonctionnalités ou la vitesse)
JENCAL a écrit :
Il faudrait que j'envoie ma <table> en ajax, et le construire avec php, pour l'enregistrer.
P.S :
Je me suis sans doute mal exprimer, mais le fichier excel doit être créer COTER CLIENT, sur le poste de l'utilisateur hein.
Comme je t'ai dit, le JS (côté client) ne peut pas créer un fichier pour Mme Michu. Par contre, tu peux faire de l'ajax et demander au serveur de créer ce fichier. Ensuite en retour tu envoies le header adéquate afin que le fichier soit proposé en téléchargement ("ouvrir" ou "enregistrer sous").
@Felipe : Merci pour le partage
merci pour vos réponse,
mdr les trois bières !
j'ai trouver un script, qui marche parfaitement et qui fonctionne et celui ci permet de télécharger un fichier excel avec comme contenue la <table> html choisi !
Je vais être franc, je n'ai même pas mis les mains dans le script, j'ai copié coller, (ce qui est rare).
Cependant, Felipe, je vais tester ce que tu me conseil, par curiosité !
Merci
mdr les trois bières !
j'ai trouver un script, qui marche parfaitement et qui fonctionne et celui ci permet de télécharger un fichier excel avec comme contenue la <table> html choisi !
<script type="text/javascript">
var tableToExcel = (function () {
var uri = 'data:application/vnd.ms-excel;base64,'
, template = '<html xmlns:o="urn:schemas-microsoft-com:office:office"xmlns:x="urn:schemas-microsoft-com:office:excel"xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><!--[endif]--></head><body><table>{table}</table></body></html>'
, base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))) }
, format = function (s, c) { return s.replace(/{(\w+)}/g, function (m, p) { return c[p]; }) }
return function (table, name) {
if (!table.nodeType) table = document.getElementById(table)
var ctx = { worksheet: name || 'Worksheet', table: table.innerHTML }
window.location.href = uri + base64(format(template, ctx))
}
})()
</script>
Je vais être franc, je n'ai même pas mis les mains dans le script, j'ai copié coller, (ce qui est rare).
Cependant, Felipe, je vais tester ce que tu me conseil, par curiosité !
Merci
Au temps pour moi. Si ça fonctionne c'est super !
Peux tu nous expliquer un peu la marche à suivre stp ? chez moi, ça ne fonctionne pas. Je ne vois pas d'erreur en console et j'ai testé sur Chromium & FF. Environnement Sled.
Modifié par niuxe (23 Jul 2015 - 23:04)
Peux tu nous expliquer un peu la marche à suivre stp ? chez moi, ça ne fonctionne pas. Je ne vois pas d'erreur en console et j'ai testé sur Chromium & FF. Environnement Sled.
Modifié par niuxe (23 Jul 2015 - 23:04)
J'ai mon tableau construit de cette manière
le tbody se rempli à la volé, suivant la recherche utilisateur
Sur un bouton j'ai un onclik
Et le script js
le tout dans la même page
lorsque je clic sur le bouton j'ai un fichier "telechargement.xls" qui s'enregistre automatiquement avec mes données à l'intérieur.
Modifié par JENCAL (24 Jul 2015 - 10:15)
<table id="id_table" class="table">
<thead>
<tr>
</tr>
</thead>
<tbody class="totals">
</tbody>
</table>
le tbody se rempli à la volé, suivant la recherche utilisateur
Sur un bouton j'ai un onclik
<button type="button" tabindex="6" id="export" onclick="tableToExcel('id_table', 'Tableau Excel')" class="btn btn-primary reset-selection">Export .xls <i class="fa fa-cog fa-fw"></i></button>
Et le script js
<script type="text/javascript">
var tableToExcel = (function () {
var uri = 'data:application/vnd.ms-excel;base64,'
, template = '<html xmlns:o="urn:schemas-microsoft-com:office:office"xmlns:x="urn:schemas-microsoft-com:office:excel"xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><!--[endif]--></head><body><table>{table}</table></body></html>'
, base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))) }
, format = function (s, c) { return s.replace(/{(\w+)}/g, function (m, p) { return c[p]; }) }
return function (table, name) {
if (!table.nodeType) table = document.getElementById(table)
var ctx = { worksheet: name || 'Worksheet', table: table.innerHTML }
window.location.href = uri + base64(format(template, ctx))
}
})()
</script>
le tout dans la même page
lorsque je clic sur le bouton j'ai un fichier "telechargement.xls" qui s'enregistre automatiquement avec mes données à l'intérieur.
Modifié par JENCAL (24 Jul 2015 - 10:15)
Un grand merci pour ce partage.
Je viens de tester et ça fonctionne assez bien. Par contre, il a fallu que je mette l'extension xls. Là je suis au taf et donc sur Vindo. Aussi, sur l'ordi j'ai Libre office et non pas ms office. Le temps de chargement du fichier était un peu long pour juste 2 cellules.
Je viens de tester et ça fonctionne assez bien. Par contre, il a fallu que je mette l'extension xls. Là je suis au taf et donc sur Vindo. Aussi, sur l'ordi j'ai Libre office et non pas ms office. Le temps de chargement du fichier était un peu long pour juste 2 cellules.
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<table id="id_table" class="table">
<thead>
<tr>
<th>bla</th>
<th>ble</th>
</tr>
</thead>
<tbody class="totals">
<td>bali</td>
<td>balo</td>
</tbody>
</table>
<button type="button" tabindex="6" id="export" onclick="tableToExcel('id_table', 'Tableau Excel')" class="btn btn-primary reset-selection">Export .xls <i class="fa fa-cog fa-fw"></i></button>
<script type="text/javascript">
var tableToExcel = (function () {
var uri = 'data:application/vnd.ms-excel;base64,'
, template = '<html xmlns:o="urn:schemas-microsoft-com:office:office"xmlns:x="urn:schemas-microsoft-com:office:excel"xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><!--[endif]--></head><body><table>{table}</table></body></html>'
, base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))) }
, format = function (s, c) { return s.replace(/{(\w+)}/g, function (m, p) { return c[p]; }) }
return function (table, name) {
if (!table.nodeType) table = document.getElementById(table)
var ctx = { worksheet: name || 'Worksheet', table: table.innerHTML }
window.location.href = uri + base64(format(template, ctx))
}
})()
</script>
</body>
</html>
Je me répond tout seul
Il faut passer par un lien caché :
voici le nouveau script
trois nouvelles lignes :
celles ci remplace
et le fameux lien caché
Modifié par JENCAL (24 Jul 2015 - 16:42)
Il faut passer par un lien caché :
voici le nouveau script
trois nouvelles lignes :
document.getElementById("dlink").href = uri + base64(format(template, ctx));
document.getElementById("dlink").download = filename;
document.getElementById("dlink").click();
celles ci remplace
window.location.href = uri + base64(format(template, ctx))
et le fameux lien caché
<a id="dlink" style="display:none;"></a>
Modifié par JENCAL (24 Jul 2015 - 16:42)