forked from sheetjs/sheetjs
69 lines
2.1 KiB
JavaScript
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
|