本帖最后由 Richard.Ma 于 2025-3-5 11:35 编辑
在使用电子表格时,用户经常需要输入公式进行计算。然而,当输入的公式不符合语法规范或引用错误时,会导致“无效公式”的提示。Excel 和 SpreadJS 在处理无效公式时的逻辑有所不同,本文将探讨如何使用 SpreadJS 实现类似 Excel 的处理方式,以提升用户体验。
行为对比
- Excel 的:
在 Excel 中,当用户输入无效公式并按回车键后,系统会弹出错误提示,同时保持单元格处于编辑状态,用户无法退出编辑模式,直到修改为有效的公式。 - SpreadJS :
在 SpreadJS 中,用户输入无效公式后,系统同样会弹出错误提示,但在关闭提示框后,SpreadJS 会自动清除输入的公式,并退出编辑状态。这种行为可能会导致用户输入的公式丢失,不利于错误修正。
实现方式
SpreadJS 提供了 EditEnding 事件,该事件会在用户结束单元格编辑时触发,我们可以在此事件中检查用户输入的公式是否合法。如果输入的公式无效,则阻止编辑结束,让用户继续修改。
- sheet.bind(GC.Spread.Sheets.Events.EditEnding, function (e, info) {
- // 判断是否是公式输入(以 '=' 开头)
- if (info.editingText.indexOf("=") === 0) {
- try {
- // 尝试计算公式
- GC.Spread.Sheets.CalcEngine.evaluateFormula(info.sheet, info.editingText, 0, 0);
- } catch (ex) {
- // 如果计算失败,并且错误为“无效的公式”,则阻止退出编辑状态
- if (ex.toString() === "无效的公式") {
- info.cancel = true; // 取消编辑结束
- }
- }
- }
- });
复制代码 如果 evaluateFormula 方法抛出异常,并且异常信息为“无效的公式”,则 info.cancel = true,阻止 SpreadJS 退出编辑状态,迫使用户修改公式。
|
|