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