forked from sheetjs/docs.sheetjs.com
		
	
		
			
	
	
		
			49 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			49 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | /* sheetjs (C) SheetJS -- https://sheetjs.com */ | ||
|  | const XLSX = require('xlsx'); | ||
|  | const formidable = require('formidable'); | ||
|  | const Readable = require('stream').Readable; | ||
|  | 
 | ||
|  | /* formidable expects the request object to be a stream */ | ||
|  | const streamify = (req) => { | ||
|  |     if(typeof req.on !== 'undefined') return req; | ||
|  |     const s = new Readable(); | ||
|  |     s._read = ()=>{}; | ||
|  |     s.push(Buffer.from(req.body)); | ||
|  |     s.push(null); | ||
|  |     Object.assign(s, req); | ||
|  |     return s; | ||
|  | }; | ||
|  | 
 | ||
|  | module.exports = (context, req) => { | ||
|  |   if(req.method == "POST") { | ||
|  |     const form = new formidable.IncomingForm(); | ||
|  |     form.parse(streamify(req), (err, fields, files) => { | ||
|  |       /* grab the first file */ | ||
|  |       var f = files["upload"]; | ||
|  |       if(!f) { | ||
|  |         context.res = { status: 400, body: "Must submit a file for processing!" }; | ||
|  |       } else { | ||
|  |         /* file is stored in a temp directory, so we can point to that and read it */ | ||
|  |         const wb = XLSX.read(f.filepath, {type:"file"}); | ||
|  | 
 | ||
|  |         /* generate CSV from first sheet */ | ||
|  |         const csv = XLSX.utils.sheet_to_csv(wb.Sheets[wb.SheetNames[0]]); | ||
|  |         context.res = { status: 200, body: csv }; | ||
|  |       } | ||
|  |       context.done(); | ||
|  |     }); | ||
|  |   } else if(req.method == "GET") { | ||
|  |     var ws = XLSX.utils.aoa_to_sheet(["SheetJS".split(""), [5,4,3,3,7,9,5]]); | ||
|  |     var wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, ws, "Data"); | ||
|  |     var buf = XLSX.write(wb, {type: "buffer", bookType: "xlsx"}); | ||
|  |     context.res = { | ||
|  |       status: 200, | ||
|  |       headers: { "Content-Disposition": `attachment; filename="SheetJSAzure.xlsx";` }, | ||
|  |       body: buf | ||
|  |     }; | ||
|  |     context.done(); | ||
|  |   } else { | ||
|  |     context.res = { status: 500, body: `Unsupported method ${req.method}` }; | ||
|  |     context.done(); | ||
|  |   } | ||
|  | }; |