Ms office 附加选定单元格的公式
我想实现以下场景:用户选择一个包含公式的单元格,单击我的外接程序的Ms office 附加选定单元格的公式,ms-office,office-js,Ms Office,Office Js,我想实现以下场景:用户选择一个包含公式的单元格,单击我的外接程序的test按钮,然后我的test函数读取所选单元格的公式,将+RAND()附加到其中,然后将其写回工作簿 下面的代码可以很好地读取所选单元格的公式,但不能很好地回写。我不确定(第二个)return ctx.sync()是否正确使用 此外,我不知道是否应该在整个场景中使用getSelectedDataAsync和setSelectedDataAsync(而不是getSelectedRange) 有人能帮忙吗 (function() {
test
按钮,然后我的test
函数读取所选单元格的公式,将+RAND()
附加到其中,然后将其写回工作簿
下面的代码可以很好地读取所选单元格的公式,但不能很好地回写。我不确定(第二个)return ctx.sync()
是否正确使用
此外,我不知道是否应该在整个场景中使用getSelectedDataAsync
和setSelectedDataAsync
(而不是getSelectedRange
)
有人能帮忙吗
(function() {
"use strict";
Office.initialize = function(reason) {
$(document).ready(function() {
app.initialize();
$('#test').click(test);
});
}
;
function test() {
Excel.run(function(ctx) {
var selectedRange = ctx.workbook.getSelectedRange();
selectedRange.load(["formulas"]);
return ctx.sync().then(function() {
console.log(selectedRange.formulas[0][0]);
var x = selectedRange.formulas[0][0] + "+RAND()";
selectedRange.formulas[0][0] = x;
return ctx.sync();
})
}).then(function() {
console.log("done");
}).catch(function(error) {
console.log("Error: " + error);
});
}
})();
错误在于,您正试图分配给公式上下文对象中的单个元素。而是使用:
selectedRange.formulas = x;
或
非常感谢。在哪些情况下,我们应该使用
getSelectedDataAsync
和setSelectedDataAsync
而不是getSelectedRange
?使用getSelectedRange有几个原因。出于您的目的,相关原因是setSelectedDataAsync和getSelectedDataAsync不支持仅限公式的值。使用getSelectedRange的另一个常见原因是在一个异步调用中启用多个读/写操作,而getSelectedDataAsync和setSelectedDataAsync每次调用只能执行一个。避免getSelectedRange的唯一原因是,如果您需要外接程序在不支持该API的地方工作,如Excel 2013。我刚刚尝试了您的建议,它起了作用。。。此外,我还试图删除第二个return ctx.sync()代码>,它仍然有效。那么,它真的有必要吗?此外,异步编程对我来说不是很简单;我习惯了VBA编程。如果你做了这个场景(即,阅读公式->修改它->写回),你会用类似的结构编写代码(即,加载->返回ctx.sync()。然后(函数(){
->写回)@SoftTimur,请回答上面的两个问题:.formulas=x
和.formulas=[[x]]
这两项工作都是在前一种情况下,我们将x公式扩展到范围内的所有单元格。在单个单元格的情况下,任何一个单元格都具有相同的效果。至于为什么需要最后一个“return ctx.sync()”——严格地说,您不需要,因为Excel.run将执行最后一个“sync”无论如何,对于你来说,如果有任何挂起的请求。但是,明确地说明这一点仍然是一个好主意,以确保你知道异步,并且不破坏承诺链。
selectedRange.formulas = [[x]];