簡體   English   中英

ExtendScript 中的 For 循環 - keys().forEach 不是函數

[英]For loop in ExtendScript - keys().forEach not a function

我正在使用帶橋的 ExtendScript 將標簽附加到 Excel 文檔中的文檔。 我正在使用 js-xlsx 庫解析 excel 文檔。 我正在運行一個 for 循環來解析各個單元格並獲取值,當我從命令行運行它時效果很好。 但是,當我在 ExtendScript 中運行它時,我得到一個例外,即 keys().forEach 不是一個函數。 出於某種原因,ExtendScript 是否會以不同的方式讀取 for 循環? 我很難弄清楚這一點。 這是給我帶來麻煩的行:

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

作為一種語言,Extendscript 停留在 ECMAScript 3 中——因此它本身並不了解Object.keys()Array.forEach() 甚至沒有JSON

可以在After Effects 腳本指南第 3 頁中找到對此的官方提及,其中說:

After Effects 腳本使用 Adob​​e ExtendScript 語言,它是 JavaScript 的擴展形式,被多個 Adob​​e 應用程序使用,包括 Photoshop、Illustrator 和 InDesign。 ExtendScript 根據 ECMA-262 規范實現 JavaScript 語言。 After Effects 腳本引擎支持 ECMA-262 標准的第 3 版,包括其符號和詞匯約定、類型、對象、表達式和語句。 ExtendScript 還實現了 E4X ECMA-357 規范,該規范定義了對 XML 格式數據的訪問。

以上內容在 PS 腳本指南中沒有找到,也沒有參考。

如果你想使用 ES5 特性,要么包含 shims,要么試試extendscriptr Extendscriptr 是一個腳本社區項目(沒有 Adob​​e 參與),它可以讓您編寫 ES5/ES6 代碼,然后將其轉換為 ES3。

我想通了。 錯誤在文件中更靠后。 ExtendScript 或我擁有的版本不支持 forEach 循環,因此我必須為 forEach 函數寫出文件並導入它。

這是在 ExtendScript 中遍歷字典的方法(至少在 After Effects 中有效)

var my_dictionary = {};
my_dictionary['fruit'] = "apple";

iterate_through_dict(my_dictionary)

function iterate_through_dict(my_dictionary) {
    for (var i in my_dictionary) {
        alert(my_dictionary[i]);
    }
}

(盡管最好將此作為對 Davide 答案的評論發布,)

有一種替代 ES5 shim 似乎更適合 ExtendScript: https ://github.com/ExtendScript/extendscript-es5-shim/

您可以將一體式 shim 下載到同一文件夾中:

curl -o extendscript-es5-shim.js https://raw.githubusercontent.com/ExtendScript/extendscript-es5-shim/master/index.js

並按如下方式使用它:

#include "extendscript-es5-shim.js";

// Have a fun with forEach() or any ES5 functions.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM