Je voulais générer une feuille Excel dès qu'un utilisateur clique sur un bouton. En gros, je veux faire exactement ce qui est discuté ici
comment transmettre les valeurs de table html aux cellules de feuille Excel (réponse de Kalle H. Väravas)
JavaScript pour exporter des tableaux HTML vers Excel
Mais de toute façon, rien ne se passe lorsque je clique sur le bouton. J'utilise le navigateur Mozilla. Mon code nécessite ActiveXObject activé. DOi-je faire quelque chose de plus pour le faire? ?
J'ai créé ce violon pour les tests. Si cela fonctionne, je vais essayer mon vrai code. si cela fonctionne pour vous alors s'il vous plaît faites le moi savoir. Merci
Code:
JS:
<script type="text/javascript">
function CreateExcelSheet() {
var i, j, str,
myTable = document.getElementById('mytable'),
rowCount = myTable.rows.length,
Excel = new ActiveXObject('Excel.Application');// Activates Excel
Excel.Workbooks.Add(); // Opens a new Workbook
Excel.Application.Visible = true; // Shows Excel on the screen
for (i = 0; i < rowCount; i++) {
for (j = 0; j < myTable.rows[i].cells.length; j++) {
str = myTable.rows[i].cells[j].innerText;
Excel.ActiveSheet.Cells(i + 1, j + 1).Value = str; // Writes to the sheet
}
}
return;
}
</script>
Html:
<table id ="myTable" >
<tr>
<td>1</td>
<td>Jan</td>
<td>01/04/2012</td>
<td>Approved</td>
</tr>
<tr>
<td>2</td>
<td>Feb</td>
<td>01/04/2012</td>
<td>Approved</td>
</tr>
</table>
<form>
<input type="button" onclick="CreateExcelSheet();" value="Create Excel Sheet" >
</form>
Voici la réponse: Exporter une table HTML dynamique vers Excel en javascript dans un navigateur Firefox par insin
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))
}
})()
Pour répondre à la question sur IE (je n'ai pas pu répondre dans la zone de commentaire en raison de restrictions de réputation), le code ci-dessus publié par Sharun ne fonctionnera pas sur IE 10+ (' nié 'erreur). Voici un extrait qui fonctionnera dans IE 10+ avec les anciennes versions de IE, Chrome et FF:
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 cellspacing="0" rules="rows" border="1" style="color:Black;background-color:White;border-color:#CCCCCC;border-width:1px;border-style:None;width:100%;border-collapse:collapse;font-size:9pt;text-align:center;">{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 }
if (navigator.msSaveBlob) {
var blob = new Blob([format(template, ctx)], { type: 'application/vnd.ms-Excel', endings: 'native' });
navigator.msSaveBlob(blob, 'export.xls')
} else {
window.location.href = uri + base64(format(template, ctx))
}
}
})()
$("#btnExport").click(function(e) {
e.preventDefault();
//getting data from table
var data_type = 'data:application/vnd.ms-Excel';
var table_div = document.getElementById('table_wrapper');//table_wrapper is table id
var table_html = table_div.outerHTML.replace(/ /g, '%20');
var a = document.createElement('a');
a.href = data_type + ', ' + table_html;
a.download = 'table_name_' + Math.floor((Math.random() * 9999999) + 1000000) + '.xls';
a.click();
});
Vous pouvez utiliser cette bonne bibliothèque: https://github.com/jmaister/excellentexport