Fixed dependencies, added compilation phase and fixed travis

This commit is contained in:
catamphetamine authored and Trevor Dixon committed 2018-03-16 13:56:38 +01:00
1 parent dcda0d9461
commit 32da0d72a4
8 files changed
+2774 -20

No files matched your search

+3
View File
@@ -0,0 +1,3 @@
{
"presets": ["env"]
}
+5 -7
View File
@@ -9,18 +9,16 @@ Install
Use
====
var parseXlsx = require('excel');
import parseXlsx from 'excel';
parseXlsx('Spreadsheet.xlsx', function(err, data) {
if(err) throw err;
// data is an array of arrays
parseXlsx('Spreadsheet.xlsx').then((data) => {
// data is an array of arrays
});
If you have multiple sheets in your spreadsheet,
parseXlsx('Spreadsheet.xlsx', '2', function(err, data) {
if(err) throw err;
// data is an array of arrays
parseXlsx('Spreadsheet.xlsx', '2').then((data) => {
// data is an array of arrays
});
Test
+225
View File
@@ -0,0 +1,225 @@
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = parseXlsx;
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _stream = require('stream');
var _stream2 = _interopRequireDefault(_stream);
var _nodeUnzip = require('node-unzip-2');
var _nodeUnzip2 = _interopRequireDefault(_nodeUnzip);
var _libxmljs = require('libxmljs');
var _libxmljs2 = _interopRequireDefault(_libxmljs);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function extractFiles(path, sheet) {
var files = _defineProperty({
strings: {},
sheet: {},
'xl/sharedStrings.xml': 'strings'
}, 'xl/worksheets/sheet' + sheet + '.xml', 'sheet');
var stream = path instanceof _stream2.default ? path : _fs2.default.createReadStream(path);
return new Promise(function (resolve, reject) {
var filePromises = [];
stream.pipe(_nodeUnzip2.default.Parse()).on('error', reject).on('close', function () {
Promise.all(filePromises).then(function () {
return resolve(files);
});
})
// For some reason `end` event is not emitted.
// .on('end', () => {
// Promise.all(filePromises).then(() => resolve(files));
// })
.on('entry', function (entry) {
var file = files[entry.path];
if (file) {
var contents = '';
filePromises.push(new Promise(function (resolve) {
entry.on('data', function (data) {
return contents += data.toString();
}).on('end', function () {
files[file].contents = contents;
resolve();
});
}));
} else {
entry.autodrain();
}
});
});
}
function calculateDimensions(cells) {
var comparator = function comparator(a, b) {
return a - b;
};
var allRows = cells.map(function (cell) {
return cell.row;
}).sort(comparator);
var allCols = cells.map(function (cell) {
return cell.column;
}).sort(comparator);
var minRow = allRows[0];
var maxRow = allRows[allRows.length - 1];
var minCol = allCols[0];
var maxCol = allCols[allCols.length - 1];
return [{ row: minRow, column: minCol }, { row: maxRow, column: maxCol }];
}
function extractData(files) {
var ns = { a: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main' };
var sheet = void 0;
var values = void 0;
var data = [];
try {
sheet = _libxmljs2.default.parseXml(files.sheet.contents);
values = _libxmljs2.default.parseXml(files.strings.contents).find('//a:si', ns).map(function (string) {
return string.find('.//a:t[not(ancestor::a:rPh)]', ns).map(function (t) {
return t.text();
}).join('');
});
} catch (parseError) {
return [];
}
function colToInt(col) {
var letters = ["", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];
col = col.trim().split('');
var n = 0;
for (var i = 0; i < col.length; i++) {
n *= 26;
n += letters.indexOf(col[i]);
}
return n;
};
var na = {
value: function value() {
return '';
},
text: function text() {
return '';
}
};
var CellCoords = function CellCoords(cell) {
_classCallCheck(this, CellCoords);
cell = cell.split(/([0-9]+)/);
this.row = parseInt(cell[1]);
this.column = colToInt(cell[0]);
};
var Cell = function Cell(cellNode) {
_classCallCheck(this, Cell);
var r = cellNode.attr('r').value();
var type = (cellNode.attr('t') || na).value();
var value = (cellNode.get('a:v', ns) || na).text();
var coords = new CellCoords(r);
this.column = coords.column;
this.row = coords.row;
this.value = value;
this.type = type;
};
var cells = sheet.find('/a:worksheet/a:sheetData/a:row/a:c', ns).map(function (node) {
return new Cell(node);
});
var d = sheet.get('//a:dimension/@ref', ns);
if (d) {
d = d.value().split(':').map(function (_) {
return new CellCoords(_);
});
} else {
d = calculateDimensions(cells);
}
var cols = d[1].column - d[0].column + 1;
var rows = d[1].row - d[0].row + 1;
times(rows, function () {
var row = [];
times(cols, function () {
return row.push('');
});
data.push(row);
});
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = cells[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var cell = _step.value;
var value = cell.value;
if (cell.type == 's') {
value = values[parseInt(value)];
}
if (data[cell.row - d[0].row]) {
data[cell.row - d[0].row][cell.column - d[0].column] = value;
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return data;
}
function parseXlsx(path) {
var sheet = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '1';
return extractFiles(path, sheet).then(function (files) {
return extractData(files);
});
};
function times(n, action) {
var i = 0;
while (i < n) {
action();
i++;
}
}
//# sourceMappingURL=excelParser.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../excelParser.js"],"names":["parseXlsx","extractFiles","path","sheet","files","strings","stream","createReadStream","Promise","resolve","reject","filePromises","pipe","Parse","on","all","then","entry","file","contents","push","data","toString","autodrain","calculateDimensions","cells","comparator","a","b","allRows","map","cell","row","sort","allCols","column","minRow","maxRow","length","minCol","maxCol","extractData","ns","values","parseXml","find","string","t","text","join","parseError","colToInt","col","letters","trim","split","n","i","indexOf","na","value","CellCoords","parseInt","Cell","cellNode","r","attr","type","get","coords","node","d","_","cols","rows","times","action"],"mappings":"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 truncated
+2 -5
View File
@@ -1,6 +1,6 @@
import fs from 'fs';
import Stream from 'stream';
import unzip from 'unzip2';
import unzip from 'node-unzip-2';
import libxmljs from 'libxmljs';
function extractFiles(path, sheet) {
@@ -8,7 +8,7 @@ function extractFiles(path, sheet) {
strings: {},
sheet: {},
'xl/sharedStrings.xml': 'strings',
['xl/worksheets/sheet' + sheet + '.xml']: 'sheet'
[`xl/worksheets/sheet${sheet}.xml`]: 'sheet'
};
const stream = path instanceof Stream ? path : fs.createReadStream(path);
@@ -39,9 +39,6 @@ function extractFiles(path, sheet) {
});
}));
} else {
// // Consume data from stream.
// // otherwise unzip.Parse() will hang forever on this entry on some xlsx files.
// entry.on('data', () => {});
entry.autodrain();
}
});
+2516
View File
File diff suppressed because it is too large. Load diff
+13 -7
View File
@@ -1,6 +1,6 @@
{
"name": "excel",
"version": "0.1.7",
"version": "0.2.0",
"description": "Simple NodeJS XLSX parser.",
"main": "excelParser.js",
"contributors": [
@@ -11,19 +11,25 @@
{
"name": "Fabian Tollenaar",
"email": "fabian@starting-point.nl"
},
{
"name": "Cat Amphetamine",
"email": "purecatamphetamine@gmail.com"
}
],
"scripts": {
"test": "mocha --reporter list"
"build": "babel ./excelParser.js --out-dir ./commonjs --source-maps",
"test": "npm run build && mocha --reporter list test/test.js",
"prepublish": "npm run test"
},
"dependencies": {
"node-promise": "~0.5.3",
"libxmljs": "~0.18.0",
"underscore": "~1.3.3",
"unzip2": "0.2.5"
"libxmljs": "^0.18.0",
"node-unzip-2": "^0.2.7"
},
"devDependencies": {
"mocha": "~1.17.1"
"babel-cli": "^6.26.0",
"babel-preset-env": "^1.6.1",
"mocha": "^1.17.1"
},
"repository": {
"type": "git",
+9 -1
View File
@@ -1,6 +1,14 @@
var parseXlsx = require('../excelParser');
var parseExcel = require('../commonjs/excelParser').default;
var assert = require('assert');
function parseXlsx(path, sheet, callback) {
if (typeof callback === 'undefined') {
callback = sheet;
sheet = '1';
}
parseExcel(path, sheet).then((data) => callback(null, data), callback);
}
var sheetsDir = __dirname + '/spreadsheets';
var sheets = {
'excel_mac_2011-basic.xlsx': [ [ 'One', 'Two' ], [ 'Three', 'Four' ] ],