使用下面的代码来识别工作表重命名事件并在重命名后执行活动。同样在 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并发布使用吗? 如果我遗漏了什么,请帮助。 预先感谢!
请查看此脚本实验室代码片段中的代码。 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 事件的事件处理程序。在注册事件处理程序之前,不会调用该代码。尝试移动代码以将事件处理程序添加到回调函数之外。