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