就像是在demo中的操作一样
具体代码
export function getNameInfo(
workbook: GCWorkbook,
customName: string,
): Spread.Sheets.NameInfo | undefined {
return workbook
.getCustomNames()
.find(nameinfo => nameinfo.getName() === customName)
}
// 这个函数可能不是必要的,看起来和直接调用 `getRangeFromFormula(workbook, customName)`
// 的返回值一样
export function getCellRangeByCustomName(
workbook: GCWorkbook,
customName: string,
): GCCellRange | null {
const nameinfo = getNameInfo(workbook, customName)
if (!nameinfo || nameinfo instanceof Spread.CalcEngine.CalcError)
return null
const formula = Spread.Sheets.CalcEngine.expressionToFormula(
workbook.getActiveSheet(),
nameinfo.getExpression(),
)
return Workbook.getRangeFromFormula(workbook, formula)
}
export function getRangeFromFormula(
workbook: GCWorkbook,
formula: string,
): GCCellRange | null {
const formulaRanges = formulaToRanges(workbook.getActiveSheet(), formula)
const [formulaRange] = formulaRanges
if (!formulaRange) return null
const [range] = formulaRange.ranges
if (!range) return null
return workbook
.getSheetFromName(formulaRange.sheetName)
?.getRange(range.row, range.col, range.rowCount, range.colCount)
}
export function formulaToRanges(
...args: Parameters<typeof Spread.Sheets.CalcEngine.formulaToRanges>
): {
sheetName: string
ranges: Spread.Sheets.Range[]
}[] {
return Spread.Sheets.CalcEngine.formulaToRanges(...args) as any
}
|