当Visual Studio的IntelliSense出现问题时,我试图重现有关创建Excel外接程序的教程。我写了这段代码:
function updateStocks() {
Excel.run(function (ctx) {
var **range** = ctx.workbook.names.getItem("Stocks")在这一步,一切都很好,但是在getItem之后,我尝试添加.getRange(),此时IntelliSense无法理解与我的变量range相关的任何内容。
真正“有趣”的是,即使没有显示属性,当我手动编写教程的代码时,代码也会正确执行。
为什么会发生这种情况,我该如何纠正它?
发布于 2017-02-01 03:47:47
您是否能够在该.run中看到其他类型的IntelliSense?也就是说,到从命名项中获取范围的时候,一切都准备好了吗?如果你要以不同的方式获得范围(例如,context.workbook.getSelectedRange()),那么你会得到IntelliSense吗?
这可能与CDN意外删除了namedItem.getRange方法的问题(现在已修复)有关(它是唯一受影响的方法,我们已经采取措施确保将来会捕捉到这些方法)。参见"Can't get range from a defined name“。CDN已经在几周前打了补丁,但JS IntelliSense文件(" VSDOC ")可能还没有。如果是这样的话,这是一个时间点问题,应该很快就会解决,因为CDN的新部署将在VSDOC和其他任何地方都有getRange方法。
不过,您可能仍然会遇到JS引擎的限制(不幸的是,JS引擎有很多限制:例如,尝试在Promise之间传送值,或者将IntelliSense对象作为参数传递给函数)。对此唯一真正好的解决方法是使用TypeScript,它允许您以声明方式向编译器/智能感知引擎断言“我知道这个类型是一个Excel.Range!"),并提供了许多其他的好处,async/await是一个非常重要的好处。我个人认为,如果你真的想要一个“首屈一指”的Office.js编码体验,TypeScript是最佳选择。为此,我在我的书"Building Office Add-ins using Office.js"中描述了如何使用TypeScript (公开地说,我是作者;但我已经有很多读者评论它对他们的资源有多大的帮助)。这本书是非常面向打字的,IntelliSense是原因之一( async/await和let是主要的其他原因) --尽管我还提供了一个附录,在那里我描述了完成相同Office.js任务的纯JavaScript方法。开始使用TypeScript只需要很小的努力,一旦你这样做了,我想你不会再回头看了。
https://stackoverflow.com/questions/41964744
复制相似问题