如何使用Excel.run()从函数返回值?

我怎样才能从这个函数返回一个值。 我不得不写一个callback作为解决方法。 我想能够编写实用函数,如下面将使用Excel.run()并返回所需的值作为函数输出。

function currentSheetName() { //How to return a value from this function. For eg: activeWorksheet.name Excel.run(function (ctx) { var activeWorksheet = ctx.workbook.worksheets.getActiveWorksheet(); activeWorksheet.load("name"); return ctx.sync().then(function(){ callback(activeWorksheet.name) }); }).then(function() { }).catch(function() { }); }; 

好问题! 几种可能的解决方

一种解决scheme是使用打字稿和async/await ,并能够完全解决问题。

另一个是在你的context.sync()调用中设置一个传递variables,或者在.then做一个return值 – 这个值将被传递。 它也会stream入Excel.run调用者,这样你就可以执行await.then(function(result) { ... })并有权访问该值。

对于后者,请参阅“ 使用Office.js构buildOffice加载项 ”一书中的以下截图(完全披露,我是本书的作者,但我确实认为你会从中学到很多,而且我也没有因为我把100%的利润捐赠给慈善机构,所以从中获得了个人利益)。 屏幕截图显示.then -s之间传递的值,但是从Excel.run返回值的概念是相同的。

价值传递

在使用TypeScript和async/await ,书中也有一些指导(JS部分实际上在附录中,因为这本书反映了我个人的观点,从TypeScript 2.0开始, async/await ,体验和使用我们的Office.js API的最好方法通过TypeScript)。