我正在尝试在Google App Script中使用string similarity,但是我对如何使其在App Script中运行尚不完全清楚,我遇到了多个错误,例如未定义“require”,另外请注意,模块本身会出现有依赖性

我的最终目标是使用此脚本在App Script中将一个字符串中充满错字的数组与一个正确字符串中的字符串匹配。这是我失败的代码。

function matchEmails() {   var doc =
 SpreadsheetApp.openById(("ID"));

   var ts = doc.getSheetByName("dir");   var source =
 doc.getSheetByName("data");   var names =
 source.getDataRange().getValues();   var data =
 ts.getDataRange().getValues();   var arr = [];   var arr2 = [];   var
 arr3 = [];   var arr4 = [];
      for (i=0; i<names.length; i++) {

     for (j=0; j<data.length; j++) {

           stringSimilarity.compareTwoStrings(names[i][0], data[j][0]);   Logger.log(stringSimilarity);




       /*
       var n = data[j][0].split();
       for (N=0; N<n.length; N++) {
       arr2.push(n[N].charAt(0));
       }
       var string2 = arr2.join("");
       var arr2 = [];

       if (names[i][0] === data[j][0]) {

       arr.push([data[j][1]]);

       }      */ //I want to replace this blanked out code with String >similarity.

       if (string === string2) {

         arr.push([data[j][1]]);
         arr3.push([i+1]);
         arr4.push([data[j][0]]);


       }
     }   }   for (i = 0; i<arr.length; i++) {
     source.getRange(arr3[i],6).setValue(arr[i]);
     source.getRange(arr3[i],7).setValue(arr4[i]);   }    }

最佳答案

您的GAS项目不是Node.js应用,因此上述操作无效。虽然Google Apps脚本和Node都使用JavaScript,但是它们提供了不同的运行时环境来执行JS代码。在GAS中,环境是Google服务器上的封闭生态系统,最终用户对此一无所知。

在Node中,运行时由V8(JS引擎)和C++附加组件组成,这些附加组件公开了低级API(访问文件系统等)。您引用的库是为Node.js创建的NPM软件包。通过NPM安装该软件包将使其可用于Node项目,但不要以为它也会神奇地出现在Google服务器上。

您必须使用这些依赖项的特定于GAS的版本,或者,如果不存在,请重构源代码以使其与GAS兼容(Node和GAS使用不同的ECMAScript版本,因此某些最新功能(例如箭头功能)会破坏您的GAS代码)。

例如,这是GAS的lodash
https://github.com/contributorpw/lodashgs

在GAS中使用库
https://developers.google.com/apps-script/guides/libraries

P.S.在GAS中,所有“.gs”文件共享相同的 namespace ,因此调用“require”功能是多余的。如果要模仿此行为,则仍然需要编写自己的require函数。

关于javascript - 在Google App脚本中使用导入的模块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49204546/

10-08 22:58