forked from sheetjs/sheetjs
		
	- IE6-9 ActiveX + VBScript shim - `writeFile` supported in browser - `oldie` demo for IE write strategies
		
			
				
	
	
		
			85 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* xlsx.js (C) 2013-present  SheetJS -- http://sheetjs.com */
 | 
						|
 | 
						|
var http = require('http');
 | 
						|
var XLSX = require('xlsx');
 | 
						|
var formidable = require('formidable');
 | 
						|
var html = "";
 | 
						|
var PORT = 3000;
 | 
						|
 | 
						|
var extmap = {};
 | 
						|
 | 
						|
var server = http.createServer(function(req, res) {
 | 
						|
	if(req.method !== 'POST') return res.end(html);
 | 
						|
	var form = new formidable.IncomingForm();
 | 
						|
	form.parse(req, function(err, fields, files) {
 | 
						|
		var f = files[Object.keys(files)[0]];
 | 
						|
		var wb = XLSX.readFile(f.path);
 | 
						|
		var ext = (fields.bookType || "xlsx").toLowerCase();
 | 
						|
		res.setHeader('Content-Disposition', 'attachment; filename="download.' + (extmap[ext] || ext) + '";');
 | 
						|
		res.end(XLSX.write(wb, {type:"buffer", bookType:ext}));
 | 
						|
	});
 | 
						|
}).listen(PORT);
 | 
						|
 | 
						|
html = [
 | 
						|
'<pre>',
 | 
						|
'<h3><a href="http://sheetjs.com/">SheetJS File Converter</a></h3>',
 | 
						|
'Upload a file to convert the contents to another format.',
 | 
						|
'',
 | 
						|
'<b>Form Fields</b>:',
 | 
						|
'- bookType: output format type (defaults to "XLSX")',
 | 
						|
'- basename: basename for output file (defaults to "download")',
 | 
						|
'',
 | 
						|
'<form method="POST" enctype="multipart/form-data" action="/">',
 | 
						|
'<input type="file" id="file" name="file"/>',
 | 
						|
'<select name="bookType">',
 | 
						|
[
 | 
						|
	["xlsb",  "XLSB"],
 | 
						|
	["xlsx",  "XLSX"],
 | 
						|
	["xlsm",  "XLSM"],
 | 
						|
	["biff8", "BIFF8 XLS"],
 | 
						|
	["biff5", "BIFF5 XLS"],
 | 
						|
	["biff2", "BIFF2 XLS"],
 | 
						|
	["xlml",  "SSML 2003"],
 | 
						|
	["ods",   "ODS"],
 | 
						|
	["fods",  "Flat ODS"],
 | 
						|
	["csv",   "CSV"],
 | 
						|
	["txt",   "Unicode Text"],
 | 
						|
	["sylk",  "Symbolic Link"],
 | 
						|
	["html",  "HTML"],
 | 
						|
	["dif",   "DIF"],
 | 
						|
	["dbf",   "DBF"],
 | 
						|
	["rtf",   "RTF"],
 | 
						|
	["prn",   "Lotus PRN"],
 | 
						|
	["eth",   "Ethercalc"],
 | 
						|
].map(function(x) { return '  <option value="' + x[0] + '">' + x[1] + '</option>'; }).join("\n"),
 | 
						|
'</select>',
 | 
						|
'<input type="submit" value="Submit Form">',
 | 
						|
'</form>',
 | 
						|
'',
 | 
						|
'<b>Form code:</b>',
 | 
						|
'<form method="POST" enctype="multipart/form-data" action="/">',
 | 
						|
'<input type="file" id="file" name="file"/>',
 | 
						|
'<select name="bookType">',
 | 
						|
'<!-- options here -->',
 | 
						|
'</select>',
 | 
						|
'<input type="submit" value="Submit Form">',
 | 
						|
'</form>',
 | 
						|
'',
 | 
						|
'<b>fetch Code:</b>',
 | 
						|
'var blob = new Blob("1,2,3\\n4,5,6".split("")); // original file',
 | 
						|
'var fd = new FormData();',
 | 
						|
'fd.set("data", blob, "foo.bar");',
 | 
						|
'fd.set("bookType", "xlsb");',
 | 
						|
'var res = await fetch("/", {method:"POST", body:fd});',
 | 
						|
'var data = await res.arrayBuffer();',
 | 
						|
'</pre>'
 | 
						|
].join("\n");
 | 
						|
 | 
						|
extmap = {
 | 
						|
	"biff2" : "xls",
 | 
						|
	"biff5" : "xls",
 | 
						|
	"biff8" : "xls",
 | 
						|
	"xlml"  : "xls"
 | 
						|
};
 | 
						|
console.log('listening on port ' + PORT);
 |