sheetjs/packages/s/dist/esm/s/names/WorkbookDefinedNameCollecti...

69 lines
2.1 KiB
JavaScript

/*! s.js (C) 2019-present SheetJS -- https://sheetjs.com */
/* vim: set ts=2: */
import { DefinedName } from "./DefinedName";
//import { Range } from "../Range";
export class WorkbookDefinedNameCollection {
constructor(wb) {
this._wb = wb;
}
;
/**
* Get read-only array of global defined names
*/
get items() {
if (!this._wb.Workbook)
return [];
if (!this._wb.Workbook.Names)
return [];
return this._wb.Workbook.Names.filter((name) => { name.Sheet == null; }).map((name) => new DefinedName(name));
}
;
/**
* Get defined name object
*/
getName(name) {
if (this._wb.Workbook && this._wb.Workbook.Names) {
const names = this._wb.Workbook.Names;
for (let i = 0; i < names.length; ++i) {
if (names[i].Name.toLowerCase() != name.toLowerCase())
continue;
if (names[i].Sheet != null)
continue;
return new DefinedName(names[i]);
}
}
throw new Error(`Cannot find defined name |${name}|`);
}
/**
* Number of global defined names
*/
get count() {
if (!this._wb.Workbook)
return 0;
if (!this._wb.Workbook.Names)
return 0;
return this._wb.Workbook.Names.filter((name) => { typeof name.Sheet == "undefined"; }).length;
}
/**
* Add or update defined name
* @param name String name
* @param ref Range object or string range/formula
* @param comment Optional comment
*/
add(name, ref /*TODO: | Range */, comment) {
try {
return this.getName(name);
}
catch (e) {
const nm = { Name: name, Ref: ref.toString(), Comment: comment || "" };
if (!this._wb.Workbook)
this._wb.Workbook = {};
if (!this._wb.Workbook.Names)
this._wb.Workbook.Names = [];
this._wb.Workbook.Names.push(nm);
return new DefinedName(nm);
}
}
}
;
//# sourceMappingURL=WorkbookDefinedNameCollection.js.map