UNPKG

easyresources

Version:

A library providing methods to easily generate json resource files from xlsx resource file

105 lines (82 loc) 3.28 kB
var Defer = require('./../infrastructure/defer'), GoogleSpreadsheet = require("google-spreadsheet"), stringUtils = require('./../infrastructure/stringUtils'), logger = require('./../infrastructure/logger'); var reader = function () { return { readWorksheet: readWorksheet } function readWorksheet(resourceFileId, worksheetName) { logger.log('Read data from google spreadsheet...'); var defer = new Defer(); if (!worksheetName) { defer.addError('Worksheet name is not specified'); } if (!resourceFileId) { defer.addError('Google spreadsheet resource file id is not specified'); } if (defer.hasErrors()) { defer.finalize(); return defer.promise; } return getWorksheet(resourceFileId, worksheetName) .then(function (worksheet) { return buildWorksheetData(worksheet); }); function getWorksheet(resourceFileId, worksheetName) { var defer = new Defer(); var spreadsheet = new GoogleSpreadsheet(resourceFileId); spreadsheet.getInfo(function (error, info) { if (error) { defer.rejectWithError(error); return; } var worksheet = info.worksheets.filter(function (item) { return item.title.trim() === worksheetName.trim(); })[0]; defer.resolve(worksheet); }); return defer.promise; } function buildWorksheetData(worksheet) { var defer = new Defer(); if (!worksheet) { defer.rejectWithError('Worksheet "' + worksheetName.trim() + '" is not found in the spreadsheet'); return defer.promise; } return getWorksheetCells(worksheet).then(function (cells) { return parseWorksheet(cells); }); } function parseWorksheet(cells) { var defer = new Defer(); try { var parsedData = []; cells.forEach(function (cell) { var row = cell.row - 1, col = cell.col - 1; if (!parsedData[row]) { parsedData[row] = []; } parsedData[row][col] = stringUtils.getStringValue(cell.value); }); defer.resolve(parsedData); } catch (e) { defer.rejectWithError(e); } return defer.promise; } function getWorksheetCells(worksheet) { var defer = new Defer(); worksheet.getCells({}, function (err, cells) { if (err) { defer.rejectWithError(err); return; } defer.resolve(cells); }); return defer.promise; } } } module.exports = reader();