UNPKG

@difftim/excelize

Version:

Excel Workbook Manager - Read and Write xlsx and csv Files.

137 lines (136 loc) 4.25 kB
// const Range = require('../../../../doc/range'); const utils = require('../../../../utils/utils'); const BaseXform = require('../../base-xform'); function assign(definedName, attributes, name, defaultValue) { const value = attributes[name]; if (value !== undefined) { definedName[name] = value; } else if (defaultValue !== undefined) { definedName[name] = defaultValue; } } function assignBool(definedName, attributes, name, defaultValue) { const value = attributes[name]; if (value !== undefined) { definedName[name] = utils.parseBoolean(value); } else if (defaultValue !== undefined) { definedName[name] = defaultValue; } } class DataValidationsEXTform extends BaseXform { get tag() { return 'x14:dataValidations'; } parseOpen(node) { switch (node.name) { case 'x14:dataValidations': this.model = {}; return true; case 'x14:dataValidation': { const dataValidation = { type: node.attributes.type || 'any', formulae: [] }; if (node.attributes.type) { assignBool(dataValidation, node.attributes, 'allowBlank'); } assignBool(dataValidation, node.attributes, 'showInputMessage'); assignBool(dataValidation, node.attributes, 'showErrorMessage'); switch (dataValidation.type) { case 'any': case 'list': case 'custom': break; default: assign(dataValidation, node.attributes, 'operator', 'between'); break; } assign(dataValidation, node.attributes, 'promptTitle'); assign(dataValidation, node.attributes, 'prompt'); assign(dataValidation, node.attributes, 'errorStyle'); assign(dataValidation, node.attributes, 'errorTitle'); assign(dataValidation, node.attributes, 'error'); this._dataValidation = dataValidation; return true; } case 'x14:formula1': case 'x14:formula2': this._formula = []; return true; case 'xm:sqref': this._sqref = true; return true; default: return false; } } parseText(text) { if (this._sqref) { this._address = text; return; } if (this._formula) { this._formula.push(text); } } parseClose(name) { switch (name) { case 'x14:dataValidations': return false; case 'x14:dataValidation': { if (!this._dataValidation.formulae || !this._dataValidation.formulae.length) { delete this._dataValidation.formulae; delete this._dataValidation.operator; } if (!this._address) { return true; } // The four known cases: 1. E4:L9 N4:U9 2.E4 L9 3. N4:U9 4. E4 const list = this._address.split(/\s+/g) || []; list.forEach(addr => { // if (addr.includes(':')) { // const range = new Range(addr); // range.forEachAddress(address => { // this.model[address] = this._dataValidation; // }); // } else { // this.model[addr] = this._dataValidation; // } this.model[addr] = this._dataValidation; }); return true; } case 'x14:formula1': case 'x14:formula2': { let formula = this._formula.join(''); switch (this._dataValidation.type) { case 'whole': case 'textLength': formula = parseInt(formula, 10); break; case 'decimal': formula = parseFloat(formula); break; case 'date': formula = utils.excelToDate(parseFloat(formula)); break; default: break; } this._dataValidation.formulae.push(formula); this._formula = undefined; return true; } case 'xm:sqref': this._sqref = false; return true; default: return true; } } } module.exports = DataValidationsEXTform; //# sourceMappingURL=data-validations-ext-form.js.map