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);
 |