这里给您提供一个简单的方案,方案的原理是利用cellChanged事件,监听单元格的变化,如果单元格此次的变化是设置公式,那么就看这个公式是否符合您希望避免出现的情形。这里利用了formulaToExpress方法,它返回一个公式树,其中type为1时,则为引用(Reference),然后继续判断是单个的单元格引用还是一个区域的引用,如果是区域,则将公式置为空。是否为区域的判断方式是看express中有没有endRow和endColumn属性。
- spread.bind(GC.Spread.Sheets.Events.CellChanged, function (sender, args) {
- // 只处理公式
- if (args.propertyName != "formula" || !args.newValue) {
- return
- }
- let expression = GC.Spread.Sheets.CalcEngine.formulaToExpression(args.sheet, args.newValue)
- // type=1代表:表达式的内容是一个引用
- if (expression.type == 1) {
- let keys = Object.keys(expression)
- // A1:A3是一个引用,A1也是一个引用,前者不允许,而后者允许
- // 只有A1:A3这种引用,有endColumn和endRow属性
- if (keys && keys.indexOf("endColumn") > -1 || keys.indexOf("endRow") > -1) {
- args.sheet.setFormula(args.row, args.col, null)
- args.sheet.setValue(args.row, args.col, null)
- }
- }
- });
复制代码
|