/* 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(); } };