Office js Office插件按钮不调用函数
我一直在做这个项目,一个简单的Excel目录插件。我似乎无法启动我的按钮。我可以调试并查看任务窗格,但单击按钮什么也做不了 有两个按钮:创建和删除。我的js文件是 编辑 使用ScriptLab,我成功地测试了以下代码。但是,当我尝试将其移植回VS时,单击按钮时什么也不做Office js Office插件按钮不调用函数,office-js,Office Js,我一直在做这个项目,一个简单的Excel目录插件。我似乎无法启动我的按钮。我可以调试并查看任务窗格,但单击按钮什么也做不了 有两个按钮:创建和删除。我的js文件是 编辑 使用ScriptLab,我成功地测试了以下代码。但是,当我尝试将其移植回VS时,单击按钮时什么也不做 $("#run").click(() => tryCatch(run)); async function run() { await Excel.run(async (context) => { va
$("#run").click(() => tryCatch(run));
async function run() {
await Excel.run(async (context) => {
var sheets = context.workbook.worksheets;
sheets.load("items/name");
var sheetName = 'Table of Contents';
await context.sync();
return context.sync()
.then(function () {
var toc = sheets.items.find(ws => ws.name == sheetName);
if (!toc) {
toc = sheets.add(sheetName);
context.sync();
} else {
toc.getUsedRange().clear();
}
toc.load("name, position");
context.sync();
var values = [];
var count = 0;
sheets.items.forEach((ws) => {
if (ws.name !== sheetName) {
values.push([(count + 1), "=HYPERLINK(\"#\"&\"'\" & \"" + ws.name + "\" & \"'!A1\",\"" + ws.name + "\")"]);
count++;
}
})
toc.position = 0;
toc.activate();
toc.getRange("A:A").format.columnWidth = 2;
toc.getRange("B:B").format.columnWidth = 20;
toc.getRange("C:C").format.columnWidth = 200;
toc.getRange("C:C").format.wrapText = true;
toc.getRange("1:1").format.rowHeight = 5;
toc.getRange("3:3").format.rowHeight = 5;
toc.getRange("B2").values = [["Table of Contents"]];
toc.getRange("B2").format.font.size = 18;
toc.getRange("B2").format.font.bold = true;
if (values.length === 0) {
console.log('error 1');
return context.sync();
}
var dataRangeAddress = `B4:C${3 + (count || 1)}`;
var dataRange = toc.getRange(dataRangeAddress);
context.sync();
dataRange.values = values;
toc.calculate(false);
return context.sync();
});
await context.sync();
});
};
/** Default helper for invoking an action and handling errors. */
async function tryCatch(callback) {
try {
await callback();
} catch (error) {
// Note: In a production add-in, you'd want to notify the user through your add-in's UI.
console.error(error);
}
};
我注意到的一件事是,你有一个
用于。。。在循环中,在工作表上运行。项目:
for (i in sheets.items)
但这是一个数组。对…使用被认为是一种不好的做法。。。在
数组上循环。(请参阅。)除此之外,做一些非标准的事情会让其他人更难对您的代码进行推理
更重要的是,您需要获得更多有关出错原因的信息。请下载。您可以使用它来测试您的方法,它有一个很好的控制台,可以向您报告错误
更新:我还看到您的removeTableOfContents
函数测试了的真实性!工作表
,但文件中未声明名为工作表
的变量,因此!工作表
将始终解析为真实 最初我是从一个模板开始工作并调整它。这是在升级到2019年之前在VS(2015)的早期版本中创建的。因此,我发现命名约定略有不同
此特定问题与'element'和'messageBanner'变量中的Office.initialize函数有关。调整此代码可以让按钮发挥作用。我怀疑如果我没有在早期版本中创建原始项目,它可能会工作得很好
原始/违规代码:
var element = document.querySelector('.ms-MessageBanner');
messageBanner = new fabric.MessageBanner(element);
调整/工作代码:
var element = document.querySelector('.MessageBanner');
messageBanner = new components.MessageBanner(element);
啊,好的。我认为这是一个需要迭代的对象。我大致理解其中的差异。谢谢你的链接。我尝试了ScriptLab,但出现了一个错误。不知道如何发布我使用的代码,这些注释是有限制的。非常感谢您的帮助!另外,我得到的原始纸张循环来自:。很好。我会把那个循环修好的。更新了帖子里的代码。让它在ScriptLab中工作,但在VS项目中仍然不工作。可能是回调?您的处理程序分配在处理程序名称周围加上双引号,如$(“#toCreate”)。单击(“createTableOfContents”)
。删除双引号。