Ho una pagina web che ha 3 tabelle e vorrei esportarle tutte e 3 nello stesso file excel. Mi piacerebbe avere ogni tabella nel proprio foglio, ma averli tutti sullo stesso foglio va bene. Dopo alcuni googling, tutto quello che ho visto è esportare una tabella in un foglio Excel.Come esportare più tabelle html per eccellere?
risposta
var tablesToExcel = (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>'
, templateend = '</x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head>'
, body = '<body>'
, tablevar = '<table>{table'
, tablevarend = '}</table>'
, bodyend = '</body></html>'
, worksheet = '<x:ExcelWorksheet><x:Name>'
, worksheetend = '</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet>'
, worksheetvar = '{worksheet'
, worksheetvarend = '}'
, base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))) }
, format = function (s, c) { return s.replace(/{(\w+)}/g, function (m, p) { return c[p]; }) }
, wstemplate = ''
, tabletemplate = '';
return function (table, name, filename) {
var tables = table;
for (var i = 0; i < tables.length; ++i) {
wstemplate += worksheet + worksheetvar + i + worksheetvarend + worksheetend;
tabletemplate += tablevar + i + tablevarend;
}
var allTemplate = template + wstemplate + templateend;
var allWorksheet = body + tabletemplate + bodyend;
var allOfIt = allTemplate + allWorksheet;
var ctx = {};
for (var j = 0; j < tables.length; ++j) {
ctx['worksheet' + j] = name[j];
}
for (var k = 0; k < tables.length; ++k) {
var exceltable;
if (!tables[k].nodeType) exceltable = document.getElementById(tables[k]);
ctx['table' + k] = exceltable.innerHTML;
}
//document.getElementById("dlink").href = uri + base64(format(template, ctx));
//document.getElementById("dlink").download = filename;
//document.getElementById("dlink").click();
window.location.href = uri + base64(format(allOfIt, ctx));
}
})();
E l'HTML
<html>
<head>
<title>JS to Excel</title>
</head>
<body>
<table id="1">
<tr><td>Hi</td></tr>
<tr><td>Hey</td></tr>
<tr><td>Hello</td></tr>
</table>
<table id="2">
<tr><td>Night</td></tr>
<tr><td>Evening</td></tr>
<tr><td>Nite</td></tr>
</table>
<a id="dlink" style="display:none;"></a>
<input type="button" onclick="tablesToExcel(['1', '2'], ['first', 'second'], 'myfile.xls')" value="Export to Excel">
<script src="~/Views/JS/JSExcel.js" type="text/javascript"></script>
</body>
</html>
NOTA: questo non funziona su IE ('i dati troppo piccolo' errore) e su Firefox entrambe le tabelle sono messi sullo stesso foglio.
credito anche a questo thread - HTML Table to Excel Javascript
Ho trovato che questo non funziona bene quando si utilizzano più fogli. Nel mio caso, http://stackoverflow.com/questions/29698796/how-to-convert-html-table-to-excel-with-multiple-sheet questo ha funzionato bene. Una cosa dovrebbe stare attenta è il carattere '/' nel nome del foglio. –
Ho questo errore con questo codice Il prefisso "x" per l'elemento "x: ExcelWorksheet" non è associato. –
// funzione 1
$scope.exportXlsSheets = function (datasets) {
var xlsString = '<?xml version="1.0"?>\
<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">';
for(var key in dict){
var arr_of_entities= dict[key].arr;
xlsString += $scope.getSheet(arr_of_entities);
}
xlsString += '</ss:Workbook>';
var a = document.createElement('a');
a.href = 'data:application/vnd.ms-excel;base64,' + $scope.base64(xlsString);
a.target = '_blank';
a.download = 'test1.xls';
document.body.appendChild(a);
a.click();
}
$scope.base64 = function (s) {
return window.btoa(unescape(encodeURIComponent(s)))
}
// funzione 2
$scope.getSheet = function (sheetName, entities) {
var res = '<ss:Worksheet ss:Name="'+sheetName+"></ss:Worksheet>\
<ss:Table>';
var row = '<ss:Row>';
for (i = 0; i < entities.length; i++) {
var entity = entities[i];
row += '<ss:Cell>\
<ss:Data ss:Type="String">'+entity.value +'</ss:Data>\
</ss:Cell>';
}
row += '</ss:Row>';
res += row;
return res;
}
è angolare, ma non dovrebbe importare. – Ehud
Questa risposta mi ha indirizzato nella giusta direzione. Supporta mettere i dati su diversi fogli. Produce SpreadsheetML non HTML.Maggiori informazioni in questa risposta qui: http://stackoverflow.com/a/150368/373981 –
@Ehud puoi per favore dare il jsfiddle per questo? sarebbe facile capire in quale formato vengono passati i "set di dati" –
Here è una soluzione migliore che supporta tavolo esportatore l'ultima Excel formato cioè xlsx . La soluzione accettata fallirebbe nel caso in cui il numero totale di righe da esportare fosse superiore a 3407 su Chrome.
Un esempio dal link qui sopra: http://jsfiddle.net/6ckj281f/
html
<button onclick="saveFile()">Save XLSX file</button>
javascript
window.saveFile = function saveFile() {
var data1 = [{a:1,b:10},{a:2,b:20}];
var data2 = [{a:100,b:10},{a:200,b:20}];
var opts = [{sheetid:'One',header:true},{sheetid:'Two',header:false}];
var res = alasql('SELECT INTO XLSX("restest344b.xlsx",?) FROM ?',
[opts,[data1,data2]]);
}
- 1. Come esportare la tabella html per eccellere usando PHPExcel?
- 2. Tabella HTML da eccellere - PHP
- 3. Export DataTable per eccellere con EPPlus
- 4. Esportare tabelle jsp per Excel, word, pdf
- 5. Come esportare JasperReport in HTML?
- 6. csv per eccellere conversione
- 7. Come esportare tutti i numeri e il suo contenuto (Contenuto completo) per eccellere in JIRA?
- 8. Esportare i risultati della query sql per eccellere utilizzando vba con intestazioni
- 9. Esportazione di tabelle R in HTML
- 10. primeNG DataTable - eccellere come filtro
- 11. Come esportare tutti i pertinenti HTML/CSS per un elemento
- 12. Linq - Raggruppamento per più tabelle
- 13. MYSQL - Come esportare le tabelle specificando solo determinati campi?
- 14. Laravel più tabelle per migrazione
- 15. Come esportare localmente la tabella dal database di produzione di heroku per eccellere dalla console usando Ruby?
- 16. scrape più tabelle HTML collegate in R e rvest
- 17. CoffeeScript e NodeJS: come esportare più classi?
- 18. Esportare più grafici glm come file PNG?
- 19. Come specificare tabelle grandi (multilinea)?
- 20. JasperReports Server: come esportare report come file html usando l'url
- 21. Javascript per esportare la tabella html in Excel
- 22. Email HTML: tabelle o div?
- 23. Esportare tutte le tabelle da SQL Server in file separati
- 24. Come esportare la pagina html in formato pdf?
- 25. utilizzando NOT IN per più tabelle
- 26. Come esportare R presentazione lucido a PDF o HTML
- 27. HTML - Due tabelle orizzontalmente affiancate
- 28. Come posso esportare i dati del modulo HTML in PDF?
- 29. SQL con più tabelle
- 30. Allinea più tabelle affiancate
E come si vorrebbe fare questo? Con quale lingua? In quale ambiente? Quanto impegno hai messo in questo te finora? Hai abbastanza badge e rappresentanti per conoscere le regole. –
Che linguaggio di programmazione stai usando? Solo HTML e Javascript? –
@ alex.pulver Sto usando pagine Web ASP.NET. Ma sto solo cercando di farlo in HTML e Javascript. – dotnetN00b