Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用office.js(office加载项)访问BindingDataChanged事件中的旧单元格值和Excel中的单元格位置_Javascript_Excel_Office365_Office Addins_Office App - Fatal编程技术网

Javascript 使用office.js(office加载项)访问BindingDataChanged事件中的旧单元格值和Excel中的单元格位置

Javascript 使用office.js(office加载项)访问BindingDataChanged事件中的旧单元格值和Excel中的单元格位置,javascript,excel,office365,office-addins,office-app,Javascript,Excel,Office365,Office Addins,Office App,我在Excel中有一个表,我想在用户修改单元格值时检测更改。为了反映这些特定的变化,我需要知道单元格位置和旧单元格值。我能够在Excel VBA/COM外接程序中实现这一点,但不能使用JavaScript。此时没有任何直接的方法来获取位置和旧单元格值。但在找到更好的方法之前,您可以使用以下一些变通方法: -跟踪用户表的内容:当它第一次链接到外接程序时,可以获取整个表。添加绑定并侦听事件以检测更新。每次有更新时,您都可以手动将其与您自己的副本进行比较。重新启动外接程序后,可以使用对象重新初始化内存

我在Excel中有一个表,我想在用户修改单元格值时检测更改。为了反映这些特定的变化,我需要知道单元格位置和旧单元格值。我能够在Excel VBA/COM外接程序中实现这一点,但不能使用JavaScript。

此时没有任何直接的方法来获取位置和旧单元格值。但在找到更好的方法之前,您可以使用以下一些变通方法:

-跟踪用户表的内容:当它第一次链接到外接程序时,可以获取整个表。添加绑定并侦听事件以检测更新。每次有更新时,您都可以手动将其与您自己的副本进行比较。重新启动外接程序后,可以使用对象重新初始化内存中的副本

-使用事件和事件跟踪表中用户的选择。然后,每当表中的数据发生更改时,使用保存的单元格确定用户进行更改时选择的单元格。请注意,即使用户什么也不做,也可能会对表进行更改—例如,另一个外接程序可能会更改内容。还请注意,BindingSelectionChangedEventArgs报告用户选择更改后的最终位置,而不是初始位置,因此每当用户更改单元格但将其选择保留在表中时,您需要使用最后一个位置

此外,您可能实际上不需要使用上述解决方法,这取决于外接程序正在执行的操作:例如,如果表很小,则只要有更改,就可以完全覆盖必要的列


-Michael(外接程序团队的程序经理)

此时,没有任何直接的方法可以获取位置和旧单元格值。但在找到更好的方法之前,您可以使用以下一些变通方法:

-跟踪用户表的内容:当它第一次链接到外接程序时,可以获取整个表。添加绑定并侦听事件以检测更新。每次有更新时,您都可以手动将其与您自己的副本进行比较。重新启动外接程序后,可以使用对象重新初始化内存中的副本

-使用事件和事件跟踪表中用户的选择。然后,每当表中的数据发生更改时,使用保存的单元格确定用户进行更改时选择的单元格。请注意,即使用户什么也不做,也可能会对表进行更改—例如,另一个外接程序可能会更改内容。还请注意,BindingSelectionChangedEventArgs报告用户选择更改后的最终位置,而不是初始位置,因此每当用户更改单元格但将其选择保留在表中时,您需要使用最后一个位置

此外,您可能实际上不需要使用上述解决方法,这取决于外接程序正在执行的操作:例如,如果表很小,则只要有更改,就可以完全覆盖必要的列


-Michael(外接程序团队的程序经理)

谢谢您的回答,但是将大表的副本与新表进行比较将是一项昂贵的任务,是否有跟踪最后二个选择的事件(我想没有)?没错。通过观察与选择相关的事件并将坐标保存在内存中,您可以手动跟踪最后一个选择。因此,在这种情况下,使用Excel加载项将比使用Office应用程序(JavaScript API)更好?如果您需要外接程序在其他平台上工作,如Excel for iPad和Excel Online,则JavaScript API应与我建议的解决方法配合使用。如果没有,那么COM/VSTO应该可以工作,如果您已经熟悉该技术,可能会更快地实现。是的,我已经在COM/VSTO中创建了此功能,感谢您的回答,但是将大型表的副本与新表的副本进行比较将是一项昂贵的任务,并且是否存在跟踪第二个最后选择的事件(我想没有)?没错。通过观察与选择相关的事件并将坐标保存在内存中,您可以手动跟踪最后一个选择。因此,在这种情况下,使用Excel加载项将比使用Office应用程序(JavaScript API)更好?如果您需要外接程序在其他平台上工作,如Excel for iPad和Excel Online,则JavaScript API应与我建议的解决方法配合使用。如果没有,那么COM/VSTO应该可以工作,并且如果您已经熟悉该技术,可能会更快地实现