2017-01-31 18 views
1

Я пытался воспроизвести учебник о создании надстройки Excel, когда что-то не так с IntelliSense Visual Studio. Я писал этот код:Office-js не отображает свойства

function updateStocks() { 
    Excel.run(function (ctx) { 
    var **range** = ctx.workbook.names.getItem("Stocks") 

На этом этапе, все было хорошо, но после getItem, я пытался добавить .getRange() в этот момент IntelliSense не был в состоянии понять, что связано с моей переменной range.

Screenshot

Что действительно «смешно» является тот факт, что даже если не отображаются свойства, когда я пишу код учебника вручную, код выполняется без ошибок.

Почему такое поведение происходит и как его можно исправить?

+0

Hi Frederic Le Guen, ваша проблема решена или нет? –

ответ

0

Вы можете видеть IntelliSense для других типов в пределах этого .run? I.e., есть ли у вас все до такой степени, когда вы получаете диапазон от именованного элемента? Если вы хотите получить диапазон по-разному (например, context.workbook.getSelectedRange()), вы получаете IntelliSense?

Это может быть связано с проблемой (теперь исправленной), когда CDN случайно удалил метод namedItem.getRange (это было единственное, на что это было затронуто, и мы внесли меры, чтобы гарантировать, что мы поймаем их в будущем) , См. «Can't get range from a defined name». CDN был исправлен пару недель назад, но файл JS IntelliSense («VSDOC»), вероятно, не имел. Если это так, это проблема времени в момент, которая должна быть решена очень скоро, так как новые развертывания CDN будут иметь метод getRange как в VSDOC, так и во всем мире.

FWIW, вы все еще можете столкнуться с ограничениями движка JS IntelliSense (их, к сожалению, много: например, пытается передать значения через Promises или передавать объекты API в качестве параметров для функций). Единственным истинным хорошим решением для этого является использование TypeScript, который позволяет декларативно утверждать компилятору/IntelliSense-движок, что «Я знаю, что этот тип - это Excel.Range!») - и предлагает ряд других лакомств, async/await - очень важный. Я лично считаю, что если вы действительно хотите «премьера» опыта Office.js-кодирования, TypeScript - это путь. С этой целью я описываю, как использовать TypeScript в моей книге, "Building Office Add-ins using Office.js" (полное раскрытие, я автор, но у меня было много комментариев читателей о том, насколько полезен ресурс, которым они были для них). Книга очень похожа на TypeScript, и IntelliSense является одной из причин (и async/await и let являются первыми другими), хотя я также предлагаю Приложение, в котором описываю JavaScript только для выполнения тех же задач Office.js. Для начала работы с использованием TypeScript требуется лишь небольшое количество усилий, и, как только вы это сделаете, я не думаю, что вы оглянетесь.