找回密码
 立即注册

QQ登录

只需一步,快速开始

dexteryao 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-1-19 12:23  /   查看:2285  /  回复:0
本帖最后由 Richard.Huang 于 2023-9-27 13:46 编辑

SpreadJS V16可以设置allowInvalidFormula,允许用户提交非法的公式。(计算结果为#Value或者DIV0的公式并不属于非法的公式,只是计算参数类型错误或者结果无法显示)。
  1. spread.options.allowInvalidFormula = true;
复制代码

image.png380222777.png
输入的非法公式讲直接显示并不计算
image.png184657897.png

如果需要验证验证输入的公式是否非法,可以使用formulaToExpression尝试将用户输入的公式尝试解析,如果解析抛异常,则说明是非法的公式,提示用户重新输入。
  1. try{
  2.     GC.Spread.Sheets.CalcEngine.formulaToExpression(sheet, inputFormula, 0, 0, spread.options.referenceStyle === GC.Spread.Sheets.CalcEngine.ReferenceStyle.r1c1)
  3.         }
  4.         catch(err){
复制代码
这个验证可以放到EditEnding事件里直接做,如果输入错误cancel掉退出,让用户继续输入。
同时V16在EditEnding事件参数中增加了committed属性,用于判断是否提交编辑,当按esc取消编辑而退出编辑状态时,这个属性的值时false

  1. spread.bind(GC.Spread.Sheets.Events.EditEnding, function(s, e){
  2.     if(e.committed && e.editingText){
  3.         let sheet = e.sheet, spread = sheet.getParent()
  4.         try{
  5.             GC.Spread.Sheets.CalcEngine.formulaToExpression(sheet, e.editingText, 0, 0, spread.options.referenceStyle === GC.Spread.Sheets.CalcEngine.ReferenceStyle.r1c1);
  6.         catch(err){
复制代码


这里的提示如果用模态提示框,需要添加gcUIElement,因为对于自定义的元素,需要添加gcUIElement属性,如果元素或者其父元素没有该属性,点击创建的组件便会直接退出编辑状态无法编辑。
setAttribute("gcUIElement", "gcEditingInput")

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部