2016-07-21 1 views
0

Je travaille en ExtendScript avec bridge pour attacher des étiquettes à des documents d'un document Excel. J'analyse le document Excel en utilisant la bibliothèque js-xlsx. Je cours une boucle for pour analyser les cellules individuelles et obtenir les valeurs, ce qui fonctionne parfaitement lorsque je l'exécute à partir de la ligne de commande. Cependant, lorsque je l'exécute dans ExtendScript, j'obtiens une exception que keys(). ForEach n'est pas une fonction. ExtendScript lit-il les boucles différemment pour une raison quelconque? J'ai du mal à comprendre cela. Voici la ligne qui me pose problème:Pour boucle dans ExtendScript - keys(). ForEach pas une fonction

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}); 

Répondre

2

Extendscript, en tant que langage, est bloqué à ECMAScript 3 - donc il ne connaît pas nativement Object.keys(), ni Array.forEach(). Pas même JSON.

mention officielle de ce qui peut être trouvé dans le After Effects scripting guide pag.3, où il est dit:

scripts After Effects utilisent le langage Adobe ExtendScript, qui est une forme de JavaScript étendu utilisé par plusieurs applications Adobe , incluant Photoshop, Illustrator et InDesign. ExtendScript implémente le langage JavaScript conformément à la spécification ECMA-262 . Le moteur de script After Effects prend en charge la 3e édition de la norme ECMA-262, y compris ses conventions, types, objets, expressions et instructions notationnel et lexical . ExtendScript implémente également la spécification E4X ECMA-357, qui définit l'accès aux données au format XML.

Ce qui précède ne se trouve pas dans le guide de script PS, ni référence.

Si vous souhaitez utiliser les fonctionnalités ES5, incluez des cales ou essayez extendscriptr. Extendscriptr est un projet de communauté de script (sans implication d'Adobe) qui devrait vous permettre d'écrire du code ES5/ES6 qui est ensuite converti en ES3.

+1

Mis à jour le poste. Curieusement, les informations sur la conformité ECMA ne sont pas partagées par la documentation de script officielle de chaque application. –

+0

Le fichier shim à inclure dans ce cas: https://github.com/es-shims/es5-shim/blob/master/es5-shim.js –

1

J'ai compris cela. L'erreur était plus bas dans le fichier. ExtendScript, ou la version que j'ai, ne supporte pas les boucles forEach, j'ai donc dû écrire le fichier pour la fonction forEach et l'importer.