在 Excel 中使用 Office JavaScript API 创建自定义功能区(Ribbon)时,可能会遇到切换按钮(Toggle Button)的 onAction
或 getPressed
回调未运行的问题。以下是一些常见的原因和解决方法:
确保你的 manifest 文件中正确配置了切换按钮的 onAction
和 getPressed
回调。
<Control xsi:type="ToggleButton" id="myToggleButton">
<Label resid="myToggleButtonLabel"/>
<Supertip>
<Title resid="myToggleButtonTitle"/>
<Description resid="myToggleButtonDescription"/>
</Supertip>
<Icon>
<bt:Image size="16" resid="icon16"/>
<bt:Image size="32" resid="icon32"/>
<bt:Image size="80" resid="icon80"/>
</Icon>
<onAction xsi:type="ExecuteFunction" FunctionName="onToggleButtonAction"/>
<getPressed FunctionName="isToggleButtonPressed"/>
</Control>
确保在你的 JavaScript 文件中正确实现了 onAction
和 getPressed
回调函数。
Office.onReady((info) => {
if (info.host === Office.HostType.Excel) {
// Office is ready
// You can add your initialization code here
}
});
function onToggleButtonAction(event) {
// 获取当前状态
const isPressed = event.source.control.checked;
// 执行相应的操作
if (isPressed) {
console.log("Toggle button is pressed");
// 执行按下时的操作
} else {
console.log("Toggle button is not pressed");
// 执行未按下时的操作
}
// 通知 Office 操作已完成
event.completed();
}
function isToggleButtonPressed(event) {
// 返回当前按钮的状态
const isPressed = true; // 或者从某个状态变量中获取
event.completed(isPressed);
}
确保你的 Office 加载项已正确加载,并且 Office.onReady
已成功执行。
Office.onReady((info) => {
if (info.host === Office.HostType.Excel) {
console.log("Office is ready");
// 你可以在这里添加初始化代码
}
});
使用 console.log
或其他调试工具来记录回调函数的执行情况,以确保它们被正确调用。
function onToggleButtonAction(event) {
console.log("onToggleButtonAction called");
const isPressed = event.source.control.checked;
console.log("Toggle button state:", isPressed);
if (isPressed) {
console.log("Toggle button is pressed");
} else {
console.log("Toggle button is not pressed");
}
event.completed();
}
function isToggleButtonPressed(event) {
console.log("isToggleButtonPressed called");
const isPressed = true; // 或者从某个状态变量中获取
console.log("Returning toggle button state:", isPressed);
event.completed(isPressed);
}
确保你的 manifest 文件中正确引用了包含回调函数的 JavaScript 文件。
<Resources>
<bt:Images>
<bt:Image id="icon16" DefaultValue="https://contoso.com/assets/icon-16.png"/>
<bt:Image id="icon32" DefaultValue="https://contoso.com/assets/icon-32.png"/>
<bt:Image id="icon80" DefaultValue="https://contoso.com/assets/icon-80.png"/>
</bt:Images>
<bt:Urls>
<bt:Url id="functionFile" DefaultValue="https://contoso.com/assets/functions.js"/>
</bt:Urls>
</Resources>
<FunctionFile resid="functionFile"/>
有时,浏览器缓存可能会导致旧的 JavaScript 文件被加载。尝试清除浏览器缓存或在无痕模式下重新加载 Excel 加载项。
确保你使用的 Office 版本支持你所使用的 Office JavaScript API。某些功能可能在较旧的 Office 版本中不可用。
领取专属 10元无门槛券
手把手带您无忧上云