Excel中已注册的事件处理程序会停止触发已发布的侧面加载的加载项

时间:2019-04-12 06:25:32

标签: office-js

我已经使用Office.js创建了一个Excel Web加载项,并通过侧载将其提供给我们公司的员工以供内部使用。

onSettingsChanged事件附加到excel应用程序的第一个工作表。在调试模式下,事件始终稳定触发。在发行版本中,总是会有一些延迟。但是,这并没有进一步干扰外接程序的使用。 但是最近,事件仅在前1-3次触发,然后什么也没有发生。

如果已选择一个单元格,则必须使用鼠标导航器将鼠标悬停在加载项上才能执行该事件。因此,该事件仍然绑定并存在,但不再立即执行。

我已经对所有其他事件进行了测试,并且对所有这些事件都有相同的问题。 https://github.com/OfficeDev/office-js-docs-pr/blob/master/docs/excel/excel-add-ins-events.md

注册功能:

async function registerSelectionChangedHandler() {
        await Excel.run(async (context) => {
            let sheet = context.workbook.worksheets.getFirst();
            sheet.onSelectionChanged.add(onSelectionChange);

            sheet.onChanged.add(onChanged);
            sheet.onActivated.add(onActivated);
            sheet.onDeactivated.add(onDeactivated)

            await context.sync();
        });
    }

执行功能:

    async function onChanged(event) {
        errorHandler(new Error("onChanged " + event.address));
    }

    async function onActivated(event) {
        errorHandler(new Error("onActivated"));
    }

    async function onDeactivated(event) {
        errorHandler(new Error("onDeactivated"));
    }

    async function onSelectionChange(event) {
        await Excel.run(async (context) => {

            let sourceRange = context.workbook.getSelectedRange();

            sourceRange.values = [["Hello World"]];
            sourceRange.format.fill.color = "3498DB";
            sourceRange.format.font.bold = true;

            await context.sync();
        });
    }

我希望只要工作表存在,事件总是会被触发。

这是侧面加载的问题吗?我必须在外接程序或Office中进行设置或配置吗?

我创建本地测试的步骤:

  1. 使用VS 2017创建了一个新的Excel Web Add-in项目
  2. 更新了所有nuget程序包
  3. 将Office加载项项目转换为TypeScript Convert an Office Add-in project in Visual Studio to TypeScript
  4. 为Home.ts添加了事件功能和Promise错字
  5. 在本地IIS上创建一个新网站
  6. 为清单创建了一个新文件夹并共享给公众
  7. 已将清单“〜remoteAppUrl”更改为本地网站网址
  8. 将Office加载项项目发布到本地网站
  9. 将共享文件夹添加到Excel中的“受信任的加载项目录”中
  10. 将加载项添加到Excel

您可以在github上找到创建的项目。随附的video显示了已发布的加载项的行为。

1 个答案:

答案 0 :(得分:0)

感谢您报告此问题。 您可以在this link中尝试解决方法吗?

也将解决方法粘贴在这里。

  

setInterval(30000, () => {})添加到您的初始化函数中