<!DOCTYPE html> <!-- sheetjs (C) 2013-present SheetJS https://sheetjs.com --> <!-- vim: set ts=2: --> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta name="robots" content="noindex"> <title>SheetJS NW.js Demo</title> <style> #drop{ border:2px dashed #bbb; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; padding:25px; text-align:center; font:20pt bold,"Vollkorn";color:#bbb } a { text-decoration: none } </style> </head> <body> <pre> <b><a href="https://sheetjs.com">SheetJS NW.js Demo</a></b> <br /> <div id="drop">Drop a spreadsheet file here to see sheet data</div> <input type="file" name="xlfile" id="xlf" /> ... or click here to select a file </pre> <p><input type="submit" value="Export Data!" id="xport" onclick="export_xlsx();" disabled="true"></p> <div id="htmlout"></div> <br /> <script src="https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js"></script> <script> var fs = require('fs'); var process_wb = (function() { var HTMLOUT = document.getElementById('htmlout'); var XPORT = document.getElementById('xport'); return function process_wb(wb) { XPORT.disabled = false; HTMLOUT.innerHTML = ""; wb.SheetNames.forEach(function(sheetName) { var htmlstr = XLSX.utils.sheet_to_html(wb.Sheets[sheetName],{editable:true}); HTMLOUT.innerHTML += htmlstr; }); }; })(); var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-36810333-1']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); async function do_file(files) { var file = files[0]; var data = await file.arrayBuffer(); process_wb(XLSX.read(data)); } var drop = document.getElementById('drop'); function handleDrop(e) { e.stopPropagation(); e.preventDefault(); do_file(e.dataTransfer.files); } function handleDragover(e) { e.stopPropagation(); e.preventDefault(); e.dataTransfer.dropEffect = 'copy'; } drop.addEventListener('dragenter', handleDragover, false); drop.addEventListener('dragover', handleDragover, false); drop.addEventListener('drop', handleDrop, false); var xlf = document.getElementById('xlf'); function handleFile(e) { do_file(e.target.files); } xlf.addEventListener('change', handleFile, false); var export_xlsx = (function() { var HTMLOUT = document.getElementById('htmlout'); var input = document.createElement('input'); input.style.display = 'none'; input.setAttribute('nwsaveas', 'SheetJSNWDemo.xlsx'); input.setAttribute('type', 'file'); document.body.appendChild(input); input.addEventListener('cancel',function(){ alert("Save was canceled!"); }); input.addEventListener('change',function(e){ var filename=this.value, bookType=(filename.match(/[^\.]*$/)||["xlsx"])[0]; var wb = XLSX.utils.table_to_book(HTMLOUT.getElementsByTagName("TABLE")[0]); var wbout = XLSX.write(wb, {type:'buffer', bookType:bookType}); fs.writeFile(filename, wbout, function(err) { if(!err) return alert("Saved to " + filename); alert("Error: " + (err.message || err)); }); }); return function() { input.click(); }; })(); </script> </body> </html>