[]
当多个用户同时编辑同一工作表时,可能会出现冲突情况——例如,一个用户的更改因另一个用户的操作(如删除行、对列排序)而被覆盖或隐藏。
由spread-sheets-collaboration-addon包提供的协作编辑状态(Collaboration Editing Status) 功能,会实时跟踪编辑状态以避免意外结果。当冲突操作(如插入行、隐藏列)影响当前用户的编辑状态时,该功能会更新编辑状态并确保用户界面(UI)正确显示。
此功能为内置功能,无需使用任何接口方法。
已删除(Deleted):正在编辑的单元格已被移除。
单元格引用(已隐藏)[cell references(Hidden)],例如 A1(Hidden):包含正在编辑单元格的行或列已被隐藏。
单元格引用(cell references),例如 A1:正在编辑的单元格受到其他冲突操作的影响。
协作编辑状态功能支持处理以下冲突操作:
插入/删除行或列
隐藏行/列(包括筛选操作)
排序(包括筛选操作)
调整行高/列宽(可能导致编辑器与单元格位置不一致)
编辑完成后:
已删除状态(Deleted State):编辑器中的值不会写入单元格。
其他状态(Other States):编辑器中的值会写入提示框(tooltip)所指示的单元格。
当你当前正在编辑的单元格因其他用户插入或删除行/列(导致单元格位置发生变化)而受到影响时,协作编辑状态功能会通过视觉方式提示此变化——要么将该单元格标记为已删除(Deleted),要么显示其更新后的单元格引用(例如 G1、H55)。
在下方示例中,用户SpreadJS2正在编辑单元格 B8,而用户SpreadJS1删除了 B 列。可以看到,SpreadJS2的 B8 单元格上会出现已删除(Deleted) 标识,且编辑完成后,所编辑的内容不会写入该单元格。

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

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

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

当你当前正在编辑的单元格因其他用户的排序操作(导致单元格位置发生变化)而受到影响时,协作编辑状态功能会通过视觉方式提示此变化——将该单元格标记为单元格引用(例如 G1、H55)。
用户SpreadJS2正在编辑单元格 B8 时,用户SpreadJS1对 B 列按升序(A-Z)排序。此时,SpreadJS2会在正在编辑的单元格上看到B10标识,且编辑完成后,最终输入的内容会写入 B10 单元格。

调整视口内的行高或列宽,可能导致单元格位置与编辑器位置不一致。
当你当前正在编辑的单元格因其他用户调整行高/列宽而受到影响时,协作编辑状态功能会通过视觉方式提示此变化——将该单元格标记为单元格引用(例如 G1、H55)。
用户SpreadJS2正在编辑单元格 B8 时,用户SpreadJS1调整了第 5 行的行高。可以看到,SpreadJS2的 B8 单元格上会出现B8标识,且编辑完成后,所编辑的内容会写入 B8 单元格。

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

当正在编辑的单元格被删除后又重新插入,其内容仍会保持编辑前的状态。
若导致状态变化的操作被撤销(undo),则对应的状态会随之恢复。
例如,SpreadJS2正在编辑某个单元格时,SpreadJS1隐藏了包含该单元格的行,此时SpreadJS2看到的单元格状态会变为“已隐藏(hidden)”。

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