本帖最后由 Richard.Huang 于 2023-9-27 13:46 编辑
SpreadJS V16可以设置allowInvalidFormula,允许用户提交非法的公式。(计算结果为#Value或者DIV0的公式并不属于非法的公式,只是计算参数类型错误或者结果无法显示)。
- spread.options.allowInvalidFormula = true;
复制代码
输入的非法公式讲直接显示并不计算
如果需要验证验证输入的公式是否非法,可以使用formulaToExpression尝试将用户输入的公式尝试解析,如果解析抛异常,则说明是非法的公式,提示用户重新输入。
- try{
- GC.Spread.Sheets.CalcEngine.formulaToExpression(sheet, inputFormula, 0, 0, spread.options.referenceStyle === GC.Spread.Sheets.CalcEngine.ReferenceStyle.r1c1)
- }
- catch(err){
复制代码 这个验证可以放到EditEnding事件里直接做,如果输入错误cancel掉退出,让用户继续输入。
同时V16在EditEnding事件参数中增加了committed属性,用于判断是否提交编辑,当按esc取消编辑而退出编辑状态时,这个属性的值时false
- spread.bind(GC.Spread.Sheets.Events.EditEnding, function(s, e){
- if(e.committed && e.editingText){
- let sheet = e.sheet, spread = sheet.getParent()
- try{
- GC.Spread.Sheets.CalcEngine.formulaToExpression(sheet, e.editingText, 0, 0, spread.options.referenceStyle === GC.Spread.Sheets.CalcEngine.ReferenceStyle.r1c1);
- catch(err){
复制代码
这里的提示如果用模态提示框,需要添加gcUIElement,因为对于自定义的元素,需要添加gcUIElement属性,如果元素或者其父元素没有该属性,点击创建的组件便会直接退出编辑状态无法编辑。
setAttribute("gcUIElement", "gcEditingInput")
|
|