找回密码
 立即注册

QQ登录

只需一步,快速开始

chezhijun

金牌服务用户

4

主题

14

帖子

42

积分

金牌服务用户

积分
42
最新发帖
chezhijun
金牌服务用户   /  发表于:2021-8-20 09:36  /   查看:4904  /  回复:17
本帖最后由 Lynn.Dou 于 2021-8-27 11:59 编辑

spreadJS 14 有公式追溯功能嘛,等同于excel的ctrl+[ 或者 ctrl+]

17 个回复

倒序浏览
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-8-20 09:54:51
推荐
您好,
SpreadJS提供公式追踪功能,但原生上未绑定 ctrl+[ 或者 ctrl+] 快捷键,
需要您调研进行二次开发实现。
公式追踪相关内容您可以参考学习指南:
https://demo.grapecity.com.cn/sp ... et-dependent/purejs
绑定快捷键:
https://demo.grapecity.com.cn/sp ... ions/sheet-actions#
https://gcdn.grapecity.com.cn/showtopic-87326-1-1.html

您也可以在论坛搜索相关知识,获取更多信息。
回复 使用道具 举报
chezhijun
金牌服务用户   /  发表于:2021-8-27 11:18:07
板凳
Lynn.Dou 发表于 2021-8-20 09:54
您好,
SpreadJS提供公式追踪功能,但原生上未绑定 ctrl+[ 或者 ctrl+] 快捷键,
需要您调研进行二次开发 ...

 那请问一下 『[』 和 『]』 这两个按键在 key 的码值是多少呢,哪里有对应资料方便今后的查阅?
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-8-27 11:30:14
地板
可以百度搜索 “键盘键码值”查询不同按键对应的键码值。
示例链接:
https://www.bejson.com/othertools/keycodes/
回复 使用道具 举报
chezhijun
金牌服务用户   /  发表于:2021-8-27 14:32:51
5#
你好,我们这边已经将公式追踪功能绑定上相应快捷键。现在有个问题是,当 active 的单元格随着公式跳转而移动到同一个 sheet 中相应的单元格上时,公示栏中的内容不会随之改变,还是显示跳转之前的单元格的公式内容。但是如果跳转至不同 Sheet 上的单元格,则不会出现此现象。请问该如何解决?
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-8-27 17:22:47
6#
从描述中未能理解整个演示过程,建议您录制一个动图演示下操作步骤与显示效果。
并提供一个能复现此问题的简单demo,
这边结合这些资料,尝试理解下您的需求
回复 使用道具 举报
chezhijun
金牌服务用户   /  发表于:2021-8-31 15:22:11
7#
抱歉工作环境没有合适的录屏工具。附上截图一张简单说明一下情况吧。

当 activeCell 指向 E4 的时候,用红色框标(最顶上的那个)出的公式栏中显示的是

IF(ISERROR(E2-E3), "-", E2-E3)

根据公式追踪的功能,按下 ctrl + [ 后 activeShell 会指向 E2,E2 的公式内容是

IF(ISERROR('利润表'!E2, "-", '利润表'!E2)

但是实际情况是,虽然标记 activeCell 的方框移动到了 E2,但是最上方的用红色框标识出的公式栏中的内容依旧是 E4 的内容。

image.png639837951.png
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-8-31 16:04:56
8#
本帖最后由 Lynn.Dou 于 2021-8-31 16:15 编辑

绑定快捷键之后应执行操作应该是您自定义的,
个人猜测,您应该是绑定快捷键后,通过公式追踪找到公式引用的单元格,
然后聚焦在此单元格。

建议您直接提供写好的绑定快捷键demo,
这边根据你的代码看下是否可以调整。
仅从文字描述,无法定位到问题原因。

附件为demo模板,您将自己的代码添加在模板中,能复现此问题即可。

模板.zip

2.75 MB, 下载次数: 252

回复 使用道具 举报
chezhijun
金牌服务用户   /  发表于:2021-8-31 16:11:43
9#
好的,非常感谢。我们尽力提供一个能复现问题的 demo
回复 使用道具 举报
chezhijun
金牌服务用户   /  发表于:2021-8-31 16:51:37
10#
您好,您提供的 demo 文件里没有公式栏,无法复现这个问题。

关于我们绑定公式追踪的快捷键部分的代码如下

  1. let command1 = {
  2.                 canUndo: false,
  3.                 execute: function(context, options, isUndo) {
  4.                     let Commands = GC.Spread.Sheets.Commands
  5.                     if (isUndo) {
  6.                         Commands = undoTransaction(context, options)
  7.                     } else {
  8.                         Commands = startTransaction(context, options)
  9.                     }

  10.                     let sheet = context.getActiveSheet()
  11.                     let rowIndex = sheet.getActiveRowIndex()
  12.                     let columnIndex = sheet.getActiveColumnIndex()
  13.                     let childNodes = sheet.getDependents(rowIndex, columnIndex)
  14.                     if (childNodes.length > 0) {
  15.                         let targetNode = childNodes[0]
  16.                         let targetSheet = context.getSheetFromName(targetNode.sheetName)
  17.                         let targetRowIndex = targetNode.row
  18.                         let targetColumnIndex = targetNode.col
  19.                         context.setActiveSheet(targetNode.sheetName)
  20.                         targetSheet.setSelection(targetRowIndex, targetColumnIndex, 1, 1)
  21.                         targetSheet.setActiveCell(targetRowIndex, targetColumnIndex)
  22.                     }

  23.                     Commands.endTransaction(context, options)
  24.                     return true
  25.                 }
  26.             }

  27.             spread.commandManager().register("searchDependent", command1)
  28.             spread.commandManager().setShortcutKey("searchDependent", 219, true, false, false, false)

  29.             let command2 = {
  30.                 canUndo: false,
  31.                 execute: function(context, options, isUndo) {
  32.                     let Commands = GC.Spread.Sheets.Commands
  33.                     if (isUndo) {
  34.                         Commands = undoTransaction(context, options)
  35.                     } else {
  36.                         Commands = startTransaction(context, options)
  37.                     }

  38.                     let sheet = context.getActiveSheet()
  39.                     let rowIndex = sheet.getActiveRowIndex()
  40.                     let columnIndex = sheet.getActiveColumnIndex()
  41.                     let parentNodes = sheet.getPrecedents(rowIndex, columnIndex)
  42.                     if (parentNodes.length > 0) {
  43.                         let targetNode = parentNodes[0]
  44.                         let targetSheet = context.getSheetFromName(targetNode.sheetName)
  45.                         let targetRowIndex = targetNode.row
  46.                         let targetColumnIndex = targetNode.col
  47.                         context.setActiveSheet(targetNode.sheetName)
  48.                         targetSheet.setSelection(targetRowIndex, targetColumnIndex, 1, 1)
  49.                         targetSheet.setActiveCell(targetRowIndex, targetColumnIndex)
  50.                     }

  51.                     Commands.endTransaction(context, options)
  52.                     return true
  53.                 }
  54.             }

  55.             spread.commandManager().register("searchPrecedent", command2)
  56.             spread.commandManager().setShortcutKey("searchPrecedent", 221, true, false, false, false)
复制代码
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部