67 lines
2.0 KiB
TypeScript
67 lines
2.0 KiB
TypeScript
/*! s.js (C) 2019-present SheetJS -- https://sheetjs.com */
|
|
/* vim: set ts=2: */
|
|
|
|
/// <reference path="../../xlsx.d.ts"/>
|
|
|
|
import { DefinedNameCollection } from "./DefinedNameCollection";
|
|
import { DefinedName } from "./DefinedName";
|
|
//import { Range } from "../Range";
|
|
|
|
export class WorkbookDefinedNameCollection implements DefinedNameCollection {
|
|
private readonly _wb: XLSX.WorkBook;
|
|
|
|
constructor(wb: XLSX.WorkBook) {
|
|
this._wb = wb;
|
|
};
|
|
|
|
/**
|
|
* Get read-only array of global defined names
|
|
*/
|
|
get items(): DefinedName[] {
|
|
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: string): DefinedName {
|
|
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(): number {
|
|
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: string, ref: string /*TODO: | Range */, comment?: string): DefinedName {
|
|
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);
|
|
}
|
|
}
|
|
}; |