@difftim/excelize
Version:
Excel Workbook Manager - Read and Write xlsx and csv Files.
137 lines (136 loc) • 4.25 kB
JavaScript
// 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