forked from sheetjs/sheetjs
		
	
		
			
	
	
		
			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); |