2016-07-21 7 views
0

Я работаю в ExtendScript с мостом для прикрепления ярлыков к документам из документа excel. Я разбираю документ excel с помощью библиотеки js-xlsx. Я запускаю цикл for для разбора отдельных ячеек и получения значений, которые отлично работают, когда я запускаю его из командной строки. Однако, когда я запускаю его в ExtendScript, я получаю исключение, что keys(). ForEach не является функцией. По какой-то причине ExtendScript читает петли по-разному? Мне трудно понять это. Вот строка, которая дает мне проблемы:Для цикла в ExtendScript - keys(). ForEach не является функцией

var range = {s:{c:0, r:0}, e:{c:1,r:30}}; 
for (var R = range.s.r; R <= range.e.r; ++R) { 
    for (var C = range.s.c; C <= range.e.c; ++C) { 
     var cell_address = xls.utils.encode_cell({c:C, r:R}); 

ответ

2

Extendscript, как язык, застрял на ECMAScript 3 - поэтому он не знает о Object.keys(), а не Array.forEach(). Даже не JSON.

Официальное упоминание об этом можно найти в After Effects scripting guide pag.3, где он говорит:

After Effects скрипты используют язык Adobe ExtendScript, который является вытянутая форма JavaScript используется несколькими приложениями Adobe , , включая Photoshop, Illustrator и InDesign. ExtendScript реализует язык JavaScript в соответствии со спецификацией ECMA-262 . Механизм сценариев After Effects поддерживает третий выпуск Edition стандарта ECMA-262, включая его условные и лексические соглашения, типы, объекты, выражения и заявления. ExtendScript также реализует спецификацию E4X ECMA-357, которая определяет доступ к данным в формате XML.

Вышеупомянутое не найдено в руководстве по сценарию PS или ссылке.

Если вы хотите использовать функции ES5, либо включить прокладки, либо дать extendscriptr. Extendscriptr - это проект сообщества сценариев (без участия Adobe), который должен позволить вам написать код ES5/ES6, который затем преобразуется в ES3.

+1

Обновлено сообщение. Как ни странно, информация о соблюдении ECMA не распространяется на официальную скриптовую документацию каждого приложения. –

+0

Файл прокладки для включения в этот случай: https://github.com/es-shims/es5-shim/blob/master/es5-shim.js –

1

Я понял это. Ошибка была в файле ниже. ExtendScript или версия, которую я имею, не поддерживает forEach, поэтому мне пришлось записать файл для функции forEach и импортировать его.