我有一个OfficeJS Manifest文件链接到这个.html
文件,以及一个与executefunction
绑定的按钮事件。我的问题是从不同的标签中获取多个不同的值,以便我可以向Web服务器发出AJAX
请求。
(function () {
Office.initialize = function (reason) {
$(document).ready(function () {
registerBindings();
});
}
function registerBindings() {
Office.context.document.bindings.add("Sheet1!A1", "range", "binding_a");
Office.context.document.bindings.add("Sheet2!A1", "range", "binding_b");
Office.context.document.bindings.add("Sheet3!A1", "range", "binding_c");
Office.context.document.bindings.add("Sheet4!A1:C3", "range", "results");
return context.sync();
}
})();
// function file execution must be global
function executefunction() {
Office.select("bindings#binding_a", ...).getDataAsync(type,
function (result) { // callback function
Office.select("bindings#results").setDataAsync = $.AJAX(result.values)
})
event.completed();
}
因此,如何选择多个绑定并使用result.values
回调中的getDataAsync
“打包”它们?
答案 0 :(得分:1)
这里的问题是您将两个不同的API集合,即原始Shared API和较新的Excel API。虽然这些API在office.js
内共存,但它们的工作方式略有不同。
使用Excel API,您的代码应如下所示:
function registerBindings() {
return Excel.run(function (context) {
// Set your bindings
context.workbook.bindings.add("Sheet1!A1", "Range", "binding_a");
context.workbook.bindings.add("Sheet2!A1", "Range", "binding_b");
context.workbook.bindings.add("Sheet3!A1", "Range", "binding_c");
context.workbook.bindings.add("Sheet4!A1:C3", "Range", "results");
// Save the bindings to the document
return context.sync();
});
}
// function file execution must be global
function executefunction() {
return Excel.run(function (context) {
// Request your bindings
let bindingA = context.workbook.bindings.getItem("binding_a").getRange().load();
let bindingB = context.workbook.bindings.getItem("binding_b").getRange().load();
let bindingC = context.workbook.bindings.getItem("binding_c").getRange().load();
// Execute your binding request
return context.sync()
.then(function () {
console.log(bindingA.values);
// Make your ajax call
$.ajax({ /*...*/ })
.done(function (result) {
// Write the result to the workbook
context.workbook.bindings.getItem("results")
.getRange().values = result.values;
return context.sync();
});
})
});
}
请注意,对Excel API的调用是在Excel.run(function (context) {...});
函数中进行的。这是为了为API建立适当的上下文所必需的。
另请注意,在您阅读要发送到REST方法的绑定之前,您必须先将load()
这些范围context
导入subprocess.Popen()
。