[]
        
首页
开发者学堂
文档
论坛
市场
生态机会
活动
在线咨询 立即试用
(Showing Draft Content)

冲突行为处理

多人同时编辑同一工作表时的冲突处理

当多个用户同时编辑同一工作表时,可能会出现冲突情况——例如,一个用户的更改因另一个用户的操作(如删除行、对列排序)而被覆盖或隐藏。


spread-sheets-collaboration-addon包提供的协作编辑状态(Collaboration Editing Status) 功能,会实时跟踪编辑状态以避免意外结果。当冲突操作(如插入行、隐藏列)影响当前用户的编辑状态时,该功能会更新编辑状态并确保用户界面(UI)正确显示。

此功能为内置功能,无需使用任何接口方法。

状态类型(Status Types)

  • 已删除(Deleted):正在编辑的单元格已被移除。

  • 单元格引用(已隐藏)[cell references(Hidden)],例如 A1(Hidden):包含正在编辑单元格的行或列已被隐藏。

  • 单元格引用(cell references),例如 A1:正在编辑的单元格受到其他冲突操作的影响。

冲突操作(Conflict Operations)

协作编辑状态功能支持处理以下冲突操作:

  • 插入/删除行或列

  • 隐藏行/列(包括筛选操作)

  • 排序(包括筛选操作)

  • 调整行高/列宽(可能导致编辑器与单元格位置不一致)

编辑效果(Editing Effects)

编辑完成后:

  • 已删除状态(Deleted State):编辑器中的值不会写入单元格。

  • 其他状态(Other States):编辑器中的值会写入提示框(tooltip)所指示的单元格。

插入/删除行或列(Adding/Deleting Rows or Columns)

当你当前正在编辑的单元格因其他用户插入或删除行/列(导致单元格位置发生变化)而受到影响时,协作编辑状态功能会通过视觉方式提示此变化——要么将该单元格标记为已删除(Deleted),要么显示其更新后的单元格引用(例如 G1、H55)。


在下方示例中,用户SpreadJS2正在编辑单元格 B8,而用户SpreadJS1删除了 B 列。可以看到,SpreadJS2的 B8 单元格上会出现已删除(Deleted) 标识,且编辑完成后,所编辑的内容不会写入该单元格。

delete


在另一场景中,用户SpreadJS2正在编辑单元格 B8,而用户SpreadJS1在第 8 行上方插入了一行新行。可以看到,SpreadJS2的 B8 单元格上会出现B9标识,且编辑完成后,所编辑的内容会写入 B9 单元格。

add

隐藏行/列(Hiding Rows/Columns)

当你当前正在编辑的单元格因其他用户隐藏行/列而受到影响时,协作编辑状态功能会通过视觉方式提示此变化——将该单元格标记为单元格引用(已隐藏)[cell references(Hidden)],例如 A1(Hidden)。

用户SpreadJS2正在编辑单元格 B8 时,用户SpreadJS1隐藏了第 8 行。此时,SpreadJS2会在正在编辑的单元格上看到B8(已隐藏)[B8 (Hidden)] 标识。

hide

延续上一步操作,执行取消隐藏(unhide)操作后,可以看到SpreadJS2所编辑的内容会写入 B8 单元格。

unhide

排序(Sorting)

当你当前正在编辑的单元格因其他用户的排序操作(导致单元格位置发生变化)而受到影响时,协作编辑状态功能会通过视觉方式提示此变化——将该单元格标记为单元格引用(例如 G1、H55)。

用户SpreadJS2正在编辑单元格 B8 时,用户SpreadJS1对 B 列按升序(A-Z)排序。此时,SpreadJS2会在正在编辑的单元格上看到B10标识,且编辑完成后,最终输入的内容会写入 B10 单元格。

sort

调整行高/列宽(Adjusting Row Height/Column Width)

调整视口内的行高或列宽,可能导致单元格位置与编辑器位置不一致。

当你当前正在编辑的单元格因其他用户调整行高/列宽而受到影响时,协作编辑状态功能会通过视觉方式提示此变化——将该单元格标记为单元格引用(例如 G1、H55)。

用户SpreadJS2正在编辑单元格 B8 时,用户SpreadJS1调整了第 5 行的行高。可以看到,SpreadJS2的 B8 单元格上会出现B8标识,且编辑完成后,所编辑的内容会写入 B8 单元格。

resize

状态恢复(State Reversion)

已删除状态(Deleted State)

若某个单元格被删除后又重新插入,其“已删除(deleted)”状态不会恢复。这是因为系统无法判断新插入的单元格与之前删除的单元格在内容、格式等方面是否完全一致。

undo-delete

当正在编辑的单元格被删除后又重新插入,其内容仍会保持编辑前的状态。

其他状态(Other States)

若导致状态变化的操作被撤销(undo),则对应的状态会随之恢复。

例如,SpreadJS2正在编辑某个单元格时,SpreadJS1隐藏了包含该单元格的行,此时SpreadJS2看到的单元格状态会变为“已隐藏(hidden)”。

hide

之后,SpreadJS1撤销了隐藏操作,SpreadJS2看到的单元格“已隐藏”状态会消失,提示框(tooltip)也会相应更新。

undo-hide