Socket
Socket
Sign inDemoInstall

node-xlsx

Package Overview
Dependencies
Maintainers
1
Versions
41
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

node-xlsx - npm Package Compare versions

Comparing version 0.14.1 to 0.14.2

107

lib/helpers.js

@@ -1,28 +0,36 @@

'use strict';
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.isCellDescriptor = exports.isObject = exports.isString = exports.isNumber = exports.isBoolean = exports.buildSheetFromMatrix = undefined;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
exports.__esModule = true;
exports.buildSheetFromMatrix = exports.buildExcelDate = exports.isCellDescriptor = exports.isObject = exports.isString = exports.isNumber = exports.isBoolean = void 0;
var _xlsx = require('xlsx');
var _xlsx = _interopRequireDefault(require("xlsx"));
var _xlsx2 = _interopRequireDefault(_xlsx);
var ORIGIN_DATE = new Date(Date.UTC(1899, 11, 30));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var isBoolean = function isBoolean(maybeBoolean) {
return typeof maybeBoolean === 'boolean';
};
exports.isBoolean = isBoolean;
var isNumber = function isNumber(maybeNumber) {
return typeof maybeNumber === 'number';
};
exports.isNumber = isNumber;
var isString = function isString(maybeString) {
return typeof maybeString === 'string';
};
exports.isString = isString;
var isObject = function isObject(maybeObject) {
return maybeObject !== null && (typeof maybeObject === 'undefined' ? 'undefined' : _typeof(maybeObject)) === 'object';
return maybeObject !== null && typeof maybeObject === 'object';
};
exports.isObject = isObject;
var isCellDescriptor = function isCellDescriptor(maybeCell) {

@@ -32,15 +40,27 @@ return isObject(maybeCell) && 'v' in maybeCell;

var originDate = new Date(Date.UTC(1899, 11, 30));
exports.isCellDescriptor = isCellDescriptor;
var buildExcelDate = function buildExcelDate(value, is1904) {
var epoch = Date.parse(value + (is1904 ? 1462 : 0));
return (epoch - originDate) / 864e5;
return (epoch - ORIGIN_DATE) / 864e5;
};
var buildSheetFromMatrix = function buildSheetFromMatrix(data) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
exports.buildExcelDate = buildExcelDate;
var buildSheetFromMatrix = function buildSheetFromMatrix(data, options) {
if (options === void 0) {
options = {};
}
var workSheet = {};
var range = { s: { c: 1e7, r: 1e7 }, e: { c: 0, r: 0 } };
var range = {
s: {
c: 1e7,
r: 1e7
},
e: {
c: 0,
r: 0
}
};
if (!Array.isArray(data)) throw new Error('sheet data is not array');

@@ -50,4 +70,3 @@

for (var C = 0; C !== data[R].length; C += 1) {
if (!Array.isArray(data[R])) throw new Error(R + 'th row data is not array');
if (!Array.isArray(data[R])) throw new Error(`${R}th row data is not array`);
if (range.s.r > R) range.s.r = R;

@@ -57,7 +76,16 @@ if (range.s.c > C) range.s.c = C;

if (range.e.c < C) range.e.c = C;
if (data[R][C] === null) {
continue; // eslint-disable-line
}
var cell = isCellDescriptor(data[R][C]) ? data[R][C] : { v: data[R][C] };
var cellRef = _xlsx2.default.utils.encode_cell({ c: C, r: R });
var cell = isCellDescriptor(data[R][C]) ? data[R][C] : {
v: data[R][C]
};
var cellRef = _xlsx.default.utils.encode_cell({
c: C,
r: R
});
if (isNumber(cell.v)) {

@@ -70,19 +98,45 @@ cell.t = 'n';

cell.v = buildExcelDate(cell.v);
cell.z = cell.z || _xlsx2.default.SSF._table[14]; // eslint-disable-line no-underscore-dangle
cell.z = cell.z || _xlsx.default.SSF._table[14]; // eslint-disable-line no-underscore-dangle
/* eslint-disable spaced-comment, no-trailing-spaces */
/***
* Allows for an non-abstracted representation of the data
*
* example: {t:'n', z:10, f:'=AVERAGE(A:A)'}
*
* Documentation:
* - Cell Object: https://sheetjs.gitbooks.io/docs/#cell-object
* - Data Types: https://sheetjs.gitbooks.io/docs/#data-types
* - Format: https://sheetjs.gitbooks.io/docs/#number-formats
**/
/* eslint-disable spaced-comment, no-trailing-spaces */
} else if (isObject(cell.v)) {
cell.t = cell.v.t;
cell.f = cell.v.f;
cell.F = cell.v.F;
cell.z = cell.v.z;
} else {
cell.t = 's';
}
if (isNumber(cell.z)) cell.z = _xlsx2.default.SSF._table[cell.z]; // eslint-disable-line no-underscore-dangle
if (isNumber(cell.z)) cell.z = _xlsx.default.SSF._table[cell.z]; // eslint-disable-line no-underscore-dangle
workSheet[cellRef] = cell;
}
}
if (range.s.c < 1e7) {
workSheet['!ref'] = _xlsx2.default.utils.encode_range(range);
workSheet['!ref'] = _xlsx.default.utils.encode_range(range);
}
if (options['!cols']) {
workSheet['!cols'] = options['!cols'];
}
if (options['!merges']) {
workSheet['!merges'] = options['!merges'];
}
return workSheet;

@@ -92,7 +146,2 @@ };

exports.buildSheetFromMatrix = buildSheetFromMatrix;
exports.isBoolean = isBoolean;
exports.isNumber = isNumber;
exports.isString = isString;
exports.isObject = isObject;
exports.isCellDescriptor = isCellDescriptor;
//# sourceMappingURL=helpers.js.map

@@ -1,41 +0,63 @@

'use strict';
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
exports.__esModule = true;
exports.default = exports.build = exports.parseMetadata = exports.parse = void 0;
exports.parse = parse;
exports.build = build;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _xlsx = require('xlsx');
var _xlsx = _interopRequireDefault(require("xlsx"));
var _xlsx2 = _interopRequireDefault(_xlsx);
var _bufferFrom = _interopRequireDefault(require("buffer-from"));
var _bufferFrom = require('buffer-from');
var _helpers = require("./helpers");
var _bufferFrom2 = _interopRequireDefault(_bufferFrom);
var _workbook = _interopRequireDefault(require("./workbook"));
var _helpers = require('./helpers');
var parse = function parse(mixed, options) {
if (options === void 0) {
options = {};
}
var _workbook = require('./workbook');
var workSheet = _xlsx.default[(0, _helpers.isString)(mixed) ? 'readFile' : 'read'](mixed, options);
var _workbook2 = _interopRequireDefault(_workbook);
return Object.keys(workSheet.Sheets).map(function (name) {
var sheet = workSheet.Sheets[name];
return {
name,
data: _xlsx.default.utils.sheet_to_json(sheet, {
header: 1,
raw: options.raw !== false,
range: options.range ? options.range[name] : null
})
};
});
};
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.parse = parse;
function parse(mixed) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var parseMetadata = function parseMetadata(mixed, options) {
if (options === void 0) {
options = {};
}
var workSheet = _xlsx2.default[(0, _helpers.isString)(mixed) ? 'readFile' : 'read'](mixed, options);
var workSheet = _xlsx.default[(0, _helpers.isString)(mixed) ? 'readFile' : 'read'](mixed, options);
return Object.keys(workSheet.Sheets).map(function (name) {
var sheet = workSheet.Sheets[name];
return { name: name, data: _xlsx2.default.utils.sheet_to_json(sheet, { header: 1, raw: options.raw !== false }) };
return {
name,
data: sheet["!ref"] ? _xlsx.default.utils.decode_range(sheet["!ref"]) : null
};
});
}
};
function build(worksheets) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
exports.parseMetadata = parseMetadata;
var build = function build(worksheets, options) {
if (options === void 0) {
options = {};
}
var defaults = {

@@ -46,15 +68,23 @@ bookType: 'xlsx',

};
var workBook = new _workbook2.default();
var workBook = new _workbook.default();
worksheets.forEach(function (worksheet) {
var sheetName = worksheet.name || 'Sheet';
var sheetOptions = worksheet.options || {};
var sheetData = (0, _helpers.buildSheetFromMatrix)(worksheet.data || [], _extends({}, options, sheetOptions));
var sheetData = (0, _helpers.buildSheetFromMatrix)(worksheet.data || [], (0, _extends2.default)({}, options, sheetOptions));
workBook.SheetNames.push(sheetName);
workBook.Sheets[sheetName] = sheetData;
});
var excelData = _xlsx2.default.write(workBook, Object.assign({}, defaults, options));
return excelData instanceof Buffer ? excelData : (0, _bufferFrom2.default)(excelData, 'binary');
}
exports.default = { parse: parse, build: build };
var excelData = _xlsx.default.write(workBook, (0, _extends2.default)({}, defaults, options));
return excelData instanceof Buffer ? excelData : (0, _bufferFrom.default)(excelData, 'binary');
};
exports.build = build;
var _default = {
parse,
parseMetadata,
build
};
exports.default = _default;
//# sourceMappingURL=index.js.map
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
exports.__esModule = true;
exports.default = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var Workbook = function Workbook() {
_classCallCheck(this, Workbook);
this.SheetNames = [];
this.Sheets = {};
(0, _defineProperty2.default)(this, "SheetNames", []);
(0, _defineProperty2.default)(this, "Sheets", {});
};

@@ -15,0 +14,0 @@

{
"name": "node-xlsx",
"author": "Olivier Louvignes <olivier@mg-crea.com>",
"version": "0.14.1",
"version": "0.14.2",
"description": "NodeJS Excel files parser & builder",
"main": "lib/index.js",
"scripts": {
"start": "npm run test:watch",
"start": "yarn test:watch",
"test": "NODE_ENV=test jest --runInBand",
"test:watch": "npm run test -- --watch",
"test:coverage": "npm run test -- --coverage",
"lint": "NODE_ENV=test eslint src/",
"compile": "rimraf lib/*; NODE_ENV=production babel src/ -d lib/ -s",
"compile:watch": "npm run compile -- -w",
"prepublish": "npm run compile"
"test:watch": "yarn test -- --watch",
"test:coverage": "yarn test -- --coverage",
"lint": "NODE_ENV=test eslint src/ test/",
"build": "rimraf lib/*; NODE_ENV=production babel src/ -d lib/ -s",
"build:watch": "yarn build -- -w",
"prepublish": "yarn build"
},

@@ -20,21 +20,22 @@ "repository": "github:mgcrea/node-xlsx",

"dependencies": {
"buffer-from": "^1.1.0",
"xlsx": "^0.14.1"
"@babel/runtime": "^7.14.6",
"buffer-from": "^1.1.1",
"xlsx": "^0.17.0"
},
"devDependencies": {
"babel-cli": "^6.26.0",
"babel-eslint": "^8.2.3",
"babel-plugin-transform-class-properties": "^6.24.1",
"babel-plugin-transform-function-bind": "^6.22.0",
"babel-plugin-transform-object-rest-spread": "^6.26.0",
"babel-preset-env": "^1.7.0",
"babel-register": "^6.26.0",
"codacy-coverage": "^3.0.0",
"debug-utils": "^0.3.2",
"eslint": "^4.19.1",
"eslint-config-airbnb-base": "^12.1.0",
"eslint-plugin-import": "^2.12.0",
"expect": "^23.1.0",
"jest": "^23.1.0",
"rimraf": "^2.6.2"
"@babel/cli": "^7.14.5",
"@babel/core": "^7.14.6",
"@babel/plugin-proposal-class-properties": "^7.14.5",
"@babel/plugin-transform-runtime": "^7.14.5",
"@babel/preset-env": "^7.14.7",
"babel-eslint": "^10.1.0",
"codacy-coverage": "^3.4.0",
"debug-utils": "^0.5.3",
"eslint": "^7.30.0",
"eslint-config-airbnb-base": "^14.2.1",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "^2.23.4",
"expect": "^27.0.6",
"jest": "^27.0.6",
"rimraf": "^3.0.2"
},

@@ -52,4 +53,7 @@ "engines": {

"jest": {
"testEnvironment": "node"
"testEnvironment": "node",
"setupFiles": [
"<rootDir>/test/setup.js"
]
}
}

@@ -50,5 +50,5 @@ # Node XLSX

const data = [[1, 2, 3], [true, false, null, 'sheetjs'], ['foo', 'bar', new Date('2014-02-19T14:30Z'), '0.3'], ['baz', null, 'qux']]
const option = {'!cols': [{ wch: 6 }, { wch: 7 }, { wch: 10 }, { wch: 20 } ]};
const options = {'!cols': [{ wch: 6 }, { wch: 7 }, { wch: 10 }, { wch: 20 } ]};
var buffer = xlsx.build([{name: "mySheetName", data: data}], option); // Returns a buffer
var buffer = xlsx.build([{name: "mySheetName", data: data}], options); // Returns a buffer
```

@@ -63,5 +63,5 @@

const range = {s: {c: 0, r:0 }, e: {c:0, r:3}}; // A1:A4
const option = {'!merges': [ range ]};
const options = {'!merges': [ range ]};
var buffer = xlsx.build([{name: "mySheetName", data: data}], option); // Returns a buffer
var buffer = xlsx.build([{name: "mySheetName", data: data}], options); // Returns a buffer
```

@@ -77,5 +77,5 @@

const range = {s: {c: 0, r:0 }, e: {c:0, r:3}}; // A1:A4
const option = {'!merges': [ range ]};
const sheetOptions = {'!merges': [ range ]};
var buffer = xlsx.build([{name: "myFirstSheet", data: dataSheet1}, {name: "mySecondSheet", data: dataSheet2, options: options}]); // Returns a buffer
var buffer = xlsx.build([{name: "myFirstSheet", data: dataSheet1}, {name: "mySecondSheet", data: dataSheet2, options: sheetOptions}]); // Returns a buffer
```

@@ -85,2 +85,18 @@ _Beware that if you try to merge several times the same cell, your xlsx file will be seen as corrupted._

* Using Primitive Object Notation
Data values can also be specified in a non-abstracted representation.
Examples:
```js
const rowAverage = [[{t:'n', z:10, f:'=AVERAGE(2:2)'}], [1,2,3];
var buffer = xlsx.build([{name: "Average Formula", data: rowAverage}]);
```
Refer to [xlsx](https://sheetjs.gitbooks.io) documentation for valid structure and values:
- Cell Object: https://sheetjs.gitbooks.io/docs/#cell-object
- Data Types: https://sheetjs.gitbooks.io/docs/#data-types
- Format: https://sheetjs.gitbooks.io/docs/#number-formats
### Troubleshooting

@@ -87,0 +103,0 @@

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc