Экспорт данных таблицы html в Excel с помощью JavaScript / JQuery не работает должным образом в chrome browse
У меня есть таблица HTML в шаблоне скорости. Я хочу, чтобы экспортировать данные в HTML таблицу в Excel с помощью java-скрипт или jQuery, comatibale со всех браузеров. Я использую ниже скрипт
<script type="text/javascript">
function ExportToExcel(mytblId){
var htmltable= document.getElementById('my-table-id');
var html = htmltable.outerHTML;
window.open('data:application/vnd.ms-excel,' + encodeURIComponent(html));
}
</script>
этот скрипт отлично работает в Mozilla Firefox, он всплывает с диалоговым окном excel и просит открыть или сохранить параметры. Но когда я тестировал тот же скрипт в браузер Chrome он не работает как и ожидалось, при нажатии на кнопку нет всплывающего окна для excel. Данные загружаются в файл с "типом файла: файл", без расширения типа .xls Нет ошибок в консоли хрома.
Jsfiddle пример :
http://jsfiddle.net/insin/cmewv/
Это прекрасно работает в mozilla, но не в chrome.
тестовый случай браузера Chrome:
первое изображение: я нажимаю на кнопку Экспорт в excel
и результат :
8 ответов:
Excel export script работает на IE7+, Firefox и Chrome.
function fnExcelReport() { var tab_text="<table border='2px'><tr bgcolor='#87AFC6'>"; var textRange; var j=0; tab = document.getElementById('headerTable'); // id of table for(j = 0 ; j < tab.rows.length ; j++) { tab_text=tab_text+tab.rows[j].innerHTML+"</tr>"; //tab_text=tab_text+"</tr>"; } tab_text=tab_text+"</table>"; tab_text= tab_text.replace(/<A[^>]*>|<\/A>/g, "");//remove if u want links in your table tab_text= tab_text.replace(/<img[^>]*>/gi,""); // remove if u want images in your table tab_text= tab_text.replace(/<input[^>]*>|<\/input>/gi, ""); // reomves input params var ua = window.navigator.userAgent; var msie = ua.indexOf("MSIE "); if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) // If Internet Explorer { txtArea1.document.open("txt/html","replace"); txtArea1.document.write(tab_text); txtArea1.document.close(); txtArea1.focus(); sa=txtArea1.document.execCommand("SaveAs",true,"Say Thanks to Sumit.xls"); } else //other browser not tested on IE 11 sa = window.open('data:application/vnd.ms-excel,' + encodeURIComponent(tab_text)); return (sa); }
просто создайте пустой iframe:
<iframe id="txtArea1" style="display:none"></iframe>
вызовите эту функцию на:
<button id="btnExport" onclick="fnExcelReport();"> EXPORT </button>
плагин Datatable лучше всего решает эту задачу и позволяет нам экспортировать данные таблицы HTML в Excel , PDF , текст. легко настраиваемый.
пожалуйста, найдите полный пример ниже datatable ссылка:
https://datatables.net/extensions/buttons/examples/html5/simple.html
Это может помочь
function exportToExcel(){ var htmls = ""; var uri = 'data:application/vnd.ms-excel;base64,'; var 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>'; var base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) }; var format = function(s, c) { return s.replace(/{(\w+)}/g, function(m, p) { return c[p]; }) }; htmls = "YOUR HTML AS TABLE" var ctx = { worksheet : 'Worksheet', table : htmls } var link = document.createElement("a"); link.download = "export.xls"; link.href = uri + base64(format(template, ctx)); link.click(); }
http://wsnippets.com/export-html-table-data-excel-sheet-using-jquery/ попробуйте эту ссылку, это может решить вашу проблему.
вы можете использовать библиотеку, как ShieldUI, чтобы сделать это.
Он поддерживает экспорт в широко используемые форматы Excel XML и XLSX.
подробнее здесь:http://demos.shieldui.com/web/grid-general/export-to-excel
Что касается ответа sampopes от 6 июня ' 14 в 11: 59:
у меня есть вставить стиль css с размером шрифта 20px для отображения данных excel больше. В sampopes код ведущий
<tr>
теги отсутствуют, поэтому я сначала вывожу заголовок и другие строки таблиц в цикле.function fnExcelReport() { var tab_text = '<table border="1px" style="font-size:20px" ">'; var textRange; var j = 0; var tab = document.getElementById('DataTableId'); // id of table var lines = tab.rows.length; // the first headline of the table if (lines > 0) { tab_text = tab_text + '<tr bgcolor="#DFDFDF">' + tab.rows[0].innerHTML + '</tr>'; } // table data lines, loop starting from 1 for (j = 1 ; j < lines; j++) { tab_text = tab_text + "<tr>" + tab.rows[j].innerHTML + "</tr>"; } tab_text = tab_text + "</table>"; tab_text = tab_text.replace(/<A[^>]*>|<\/A>/g, ""); //remove if u want links in your table tab_text = tab_text.replace(/<img[^>]*>/gi,""); // remove if u want images in your table tab_text = tab_text.replace(/<input[^>]*>|<\/input>/gi, ""); // reomves input params // console.log(tab_text); // aktivate so see the result (press F12 in browser) var ua = window.navigator.userAgent; var msie = ua.indexOf("MSIE "); // if Internet Explorer if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) { txtArea1.document.open("txt/html","replace"); txtArea1.document.write(tab_text); txtArea1.document.close(); txtArea1.focus(); sa = txtArea1.document.execCommand("SaveAs", true, "DataTableExport.xls"); } else // other browser not tested on IE 11 sa = window.open('data:application/vnd.ms-excel,' + encodeURIComponent(tab_text)); return (sa); }
TableExport - простая, простая в реализации библиотека для экспорта таблиц HTML в файлы xlsx, xls, csv и txt.
чтобы использовать эту библиотеку, просто вызовите
TableExport
конструктора:new TableExport(document.getElementsByTagName("table")); // OR simply TableExport(document.getElementsByTagName("table")); // OR using jQuery $("table").tableExport();
дополнительные свойства могут быть переданы, чтобы настроить внешний вид ваших таблиц, кнопок и экспортированных данных. смотрите здесь дополнительную информацию
function exportToExcel() { var tab_text = "<tr bgcolor='#87AFC6'>"; var textRange; var j = 0, rows = ''; tab = document.getElementById('student-detail'); tab_text = tab_text + tab.rows[0].innerHTML + "</tr>"; var tableData = $('#student-detail').DataTable().rows().data(); for (var i = 0; i < tableData.length; i++) { rows += '<tr>' + '<td>' + tableData[i].value1 + '</td>' + '<td>' + tableData[i].value2 + '</td>' + '<td>' + tableData[i].value3 + '</td>' + '<td>' + tableData[i].value4 + '</td>' + '<td>' + tableData[i].value5 + '</td>' + '<td>' + tableData[i].value6 + '</td>' + '<td>' + tableData[i].value7 + '</td>' + '<td>' + tableData[i].value8 + '</td>' + '<td>' + tableData[i].value9 + '</td>' + '<td>' + tableData[i].value10 + '</td>' + '</tr>'; } tab_text += rows; var data_type = '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 border="2px">{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]; }) } var ctx = { worksheet: "Sheet 1" || 'Worksheet', table: tab_text } document.getElementById("dlink").href = data_type + base64(format(template, ctx)); document.getElementById("dlink").download = "StudentDetails.xls"; document.getElementById("dlink").traget = "_blank"; document.getElementById("dlink").click(); }
здесь значение от 1 до 10-это имена столбцов, которые вы получаете