Excel Office JS api - 工作表重命名事件 onNameChanged 在桌面 Excel 上不起作用

问题描述 投票:0回答:1

使用下面的代码来识别工作表重命名事件并在重命名后执行活动。同样在 Chrome/edge 浏览器上的在线版本 excel(在线 Office365)中工作正常,但在桌面版本的 excel 上无法工作(Microsoft 365 MSO (16.0.14326.21170) - 32 位)。

export const onSheetNameChange = event => {
    Excel.run(context => {
        return context.sync().then(() => {
            const { nameAfter, nameBefore } = event;
            if (nameBefore !== nameAfter) {
                console.log('nameBefore=>', nameBefore);
                console.log('nameAfter=>', nameAfter);
            }
        });
    });
};
export const onSheetRenameHandler = () => {
    Excel.run(context => {
        const sheets = context.workbook.worksheets;
        sheets.onNameChanged.add(onSheetNameChange);
        return context.sync().then(() => {
            console.log(
                'A handler has been registered for the OnNameChanged event.',
            );
        });
    });
};

遵循此文档链接来实现相同的功能。

可以在控制台中看到此错误:
未捕获(承诺中)RichApi.Error:您无法执行请求的操作。** 在新的 n (excel-win32-16.01.js:25:241192) 在 i.processRequestExecutorResponseMessage (excel-win32-16.01.js:25:305358) 在 excel-win32-16.01.js:25:303421

行动指数:
代码:“拒绝访问”
Http 状态代码:403
位置:“WorksheetCollection._RegisterEventNameChanged”
消息:“您无法执行请求的操作。”

有人可以告诉我“onNameChanged”事件支持桌面Excel并发布使用吗? 如果我遗漏了什么,请帮助。 预先感谢!

excel office-js office-addins excel-addins excel-web-addins
1个回答
0
投票

请查看此脚本实验室代码片段中的代码。 onNamedChanged 事件 API 仅适用于 Excel Web。

示例具有以下代码来注册 onNameChanged 事件的事件处理程序:

async function registerOnNameChangedHandler() {
  await Excel.run(async (context) => {
    let sheet = context.workbook.worksheets;
      sheet.onNameChanged.add(onWorksheetNameChanged);

    await context.sync();
    console.log("A handler has been registered for the OnNameChanged event.");
  });
}

这是事件处理程序代码:

async function onWorksheetNameChanged(event) {
  await Excel.run(async (context) => {
    console.log(
      "Handler for worksheet onNameChanged event has been triggered. Name 
      changed for worksheet Id : " + event.worksheetId
    );
  });
}

在您的代码中,您似乎在用作事件处理程序的回调函数中添加了 onNamedChanged 事件的事件处理程序。在注册事件处理程序之前,不会调用该代码。尝试移动代码以将事件处理程序添加到回调函数之外。

© www.soinside.com 2019 - 2024. All rights reserved.