Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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 Excel SelectionChanged事件未触发_Javascript_Excel_Reactjs_Office Js - Fatal编程技术网

Javascript Excel SelectionChanged事件未触发

Javascript Excel SelectionChanged事件未触发,javascript,excel,reactjs,office-js,Javascript,Excel,Reactjs,Office Js,开发链:Microsoft Visual Studio代码,Excel在线加载项,使用Chrome进行调试 我一直在开发一个Excel加载项,使用上述工具已经有相当一段时间没有问题了。最近,我遇到了一些问题,在运行调试版本时ExcelSelectionChanged事件没有触发,尽管成功调用了AddHandlerAsync。大约只有十分之一的调用会成功地设置钩子 我并没有改变我的代码中的任何主要内容,但我的组织最近确实在所有设备上实现了MDM,包括台式机和笔记本电脑。正如你可能想象的那样,这对我

开发链:Microsoft Visual Studio代码,Excel在线加载项,使用Chrome进行调试

我一直在开发一个Excel加载项,使用上述工具已经有相当一段时间没有问题了。最近,我遇到了一些问题,在运行调试版本时Excel
SelectionChanged
事件没有触发,尽管成功调用了
AddHandlerAsync
。大约只有十分之一的调用会成功地设置钩子

我并没有改变我的代码中的任何主要内容,但我的组织最近确实在所有设备上实现了MDM,包括台式机和笔记本电脑。正如你可能想象的那样,这对我的工作效率是一个巨大的障碍

我正在使用React(
create React app
)和
office ui fabric React

我有以下代码来设置回调:

window.addEventListener('DOMContentLoaded', () => {
    Office.initialize = (reason) => {
        console.log('Office.initialize called with reason = ' + reason)

        Office.context.document.addHandlerAsync(
            Office.EventType.DocumentSelectionChanged,
            (eventArgs) => {
                this.onExcelSelectionChanged(eventArgs)
            },
            (asyncResult) => {
                if (asyncResult.status == "succeeded") {
                    console.log('Selection changed handler was added')
                } else {
                    console.log(`Error setting event: ${JSON.stringify(asyncResult)}`);
                }
            })
    }
})
调用成功,但在VS代码调试器(带有Chrome扩展的调试器)中运行时,不会触发事件。这以前效果不错。它在生产环境中似乎运行良好

2018年2月23日编辑:

我似乎已经解决了我的大部分问题。我正在使用React路由器,并且拥有
Office。初始化为每个路径设置的
功能


为了解决问题,我使用
create react app
创建了一个全新的加载项,如中所述。我注意到
Office.initialize
位于
index.js
中,它包装了
ReactDOM.render(…)
调用。我在我的代码中重新调整了一些东西来模拟它,现在它似乎工作得更好了,尽管它仍然时不时地漏掉钩子。

很抱歉给您带来不便。您是否在联机版本和桌面版本上都遇到此问题


有一个案件正在调查中。有什么调试信息可以与我们共享吗?

当涉及到
Office.t initialize
时,首要规则是尽早分配您的功能。在分配
Office.initialize
之前,Office无法连接外接程序。如果超时时间太长,它可能会非常激进(不同平台之间的超时时间相差5秒)

如果看不到你是如何站起来的,就很难确定发生了什么。也就是说,您的
index.js
应该如下所示:

import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
import App from "./App";
import registerServiceWorker from "./registerServiceWorker";
import { BrowserRouter } from "react-router-dom";

const Office = window.Office;

Office.initialize = (reason) => {
  ReactDOM.render(
    <BrowserRouter>
      <App />
    </BrowserRouter>,
    document.getElementById("root")
  );
  registerServiceWorker();
};

话虽如此,我自己从来没有遇到过这种需要。我建议最初放弃
DOMContentLoaded
。如果您发现有特殊需要,可以随时添加

你能为最少的复制添加示例代码吗?@MichaelZlatkovsky-Microsoft-Thansk用于快速响应。我用一些代码进行了更新,但会看看我能做些什么来设置更好的复制。只是想一想,您是否尝试过使用新的API
let handler=workbook.onSelectionChanged.add(onSelectionChanged)这当然需要在批处理中。脚本实验室Excel示例中显示了一个示例,您可以查找该示例以供参考。感谢@SudhiRamamurthy-我不知道该API,我将检查它。到目前为止,我只在浏览器上尝试过它-我将进一步调查。
Office.initialize = reason => {
  window.addEventListener("DOMContentLoaded", () => {
    ReactDOM.render(
      <BrowserRouter>
        <App />
      </BrowserRouter>,
      document.getElementById("root")
    );
    registerServiceWorker();
  });
};