Pages :
(reprise du message précédent)

Je me répond tout seul

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)
Bonjour tout le monde,
je suis désolé de detérer ce sujet (pas si vieux que ça..) mais je suis confronté au même problème, j'ai un tableau que je dois récupérer en .xls. Cependant j'ai bien réussi à l'enregistrer mais pas à le renommer comme vous l'avez précédemment écrit.
J'ai cherché cette notion de lien caché sur notre ami google et je n'ai pas trouvé..
Merci pour vos réponses Smiley smile

<!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>
			<a id="dlink"  style="display:none;"></a>
            
            <button type="button" tabindex="6" id="export" onclick="tableToExcel('id_table', 'Tableau Excel')" class="btn btn-primary reset-selection">Export .xls&nbsp;&nbsp;<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 }
                 document.getElementById("dlink").href = uri + base64(format(template, ctx));
                  document.getElementById("dlink").download = filename;
                  document.getElementById("dlink").click();
            }
        })()
    </script> 
</body>
</html>
Salut,

c'est curieux, parce qu'avec mon code je renome le fichier excel, qui s'appel d’ailleurs 'Tableau Excel'... il y un truc qui m'échappe.
Bonjour,
Votre code que j'ai recopié marche sur votre machine?
En mettant les 3 lignes de JS et le lien caché je n'arrive plus à enregistrer sous format xls.
En enlevant ces 4 lignes je peux le télécharger mais sur Aurora ça me sort un nom "aléatoire", je présume, en base64.

C'est peut être une question de navigateur.. j'utilise Chrome, Aurora et Opera.

J'aurais voulu le renommer en fonction de l'heure actuelle du téléchargement. Ce qui est la première case de mon tableau.

Merci Smiley smile
Quand on touche au javascript, si l'action d'un bouton ne fonctionne pas, il faut toujours regarder dans la console du navigateur. Tu aurais vu qu'il y avait une erreur sur la variable "filename" qui est en faite à remplacer par "name" (lattribut de la function parente).
Bonjour messieurs,

Juste une autre manière d'encoder un contenu pour un fichier, et ensuite le proposer au téléchargement/ouverture, avec la méthode "blob":


SaveAs('xls', 'MonFichier');

function SaveAs(FileFormat, FFilename)
	{
	var ContentXLS = '\ufeff'+
	'<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>'+oToolName.BOMViewer+'</x:Name>'+
					'<x:WorksheetOptions>'+
						'<x:DisplayGridlines/>'+
					'</x:WorksheetOptions>'+
					'</x:ExcelWorksheet>'+
				'</x:ExcelWorksheets>'+
			'</x:ExcelWorkbook>'+
		'</xml>'+
		'<!--[endif]-->'+
	'</head>'+
	'<body>'+
		$Buffer.replace(/(<table class="fileinfos">.*<\/table>.*<\/p>)|(<th class="checkbox">.*<\/a><\/th>)|(<td><input name="checkbox_[a-z0-9\- ]{1,}" type="checkbox" \/><\/td>)/gmi, '').replace(/<span class="[a-z]{1,}" title="([a-z0-9 \(\)]{1,})"><\/span>/gmi, ' $1').replace(/<tr class="([a-z]{1,})"><td>/gmi, '<tr><td>$1 - ')+
	'</body>'+
	'</html>',
	ContentHTML = '<!DOCTYPE html><html>'+Head+'<body><div id="Retry"><a href="#Retry">'+$('#Retry a').html()+'</a><div><h1>'+oToolName.BOMViewer+'</h1><p>This page has been generated automatically by '+oToolName.BOMViewer+' '+Tool_v+'</p></div></div><h1>'+$('h1').html()+'</h1>'+$Buffer+Script+'</<body></html>',
	HrefVal = false,
	ie11 = navigator.userAgent.match(/Trident\/7.0/) && navigator.userAgent.match(/rv:11/),
	ieEDGE = navigator.userAgent.match(/Edge/g),
	ieVer= ((ie11) ? 11 : (ieEDGE ? 12 : -1));
	switch(FileFormat)
		{
		case 'xls':
			var typemime = 'application/vnd.ms-excel',
			pointer = 'savexls',
			extension = 'xls',
			content = ContentXLS;
			break;
		default:
			var typemime = 'text/html',
			pointer = 'savehtml',
			extension = 'html',
			content = ContentHTML;
			break;
		}
    if(Blob !== undefined)
		{
		var blob = new Blob([content], {type: typemime});
		HrefVal = URL.createObjectURL(blob);
		}
		else
			{
			HrefVal = 'data:text/plain,'+encodeURIComponent(content);
			}
	if(ie11)
		{
		window.navigator.msSaveOrOpenBlob(blob, FFilename+'.'+extension);
		}
		else
			{
			$('#'+pointer).prop({
			'href' : HrefVal,
			'download' : FFilename+'.'+extension,
			'target' : '_blank'
			});
			}
	}


Ca n'apporte pas grand chose au bazard, mais si ça peut être utile à certain Smiley cligne
Bonjour touts!
merci pour touts les code que vous avez envoyer!
mais Smiley sweatdrop j'ai un image sur mon tableau HTML, en ça n'affiche pas dans le excel, est ces possible ou non??? Smiley cligne Smiley cligne
Bonsoir Jencal,
il eut été selon moi bien plus aisé (et facile) de composer en .html, .css et .js pour une présentation de dossier précisément en entreprise ...

Au vu d'un fichier .excel, FireFox voire Chrome sont aujourd'hui plus agréables et performants, qui considèrent merveilleusement, par exemple le <table>, l' <img>, l' <audio>, la <video>, et le .php pour l'interaction ...

Il suffit ainsi d'oublier le format .excel que je considère obsolète, et de vous orienter vers un bon navigateur-web en octobre 2016 ; toujours et surtout pour assurer une présentation en entreprise, et accessoirement pour le web ...
Modifié par pictural (08 Oct 2016 - 23:49)
Pages :