Ale*_*ado 6 javascript algorithm google-apps-script
我试图在Google App Script中使用字符串相似性,但是我不完全清楚如何让它在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]); } }
Run Code Online (Sandbox Code Playgroud)
Ant*_*iev 16
您的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 https://github.com/oshliaer/lodashgs的lodash
在GAS中使用库 https://developers.google.com/apps-script/guides/libraries
PS在GAS中,所有".gs"文件共享相同的命名空间,因此调用"require"函数是多余的.如果你想模仿这种行为,你仍然需要编写自己的require函数.
Jef*_*ick 12
我在本文中编写了一些有关打包npm模块以供在 Apps 脚本中使用的指南。
index.jstl;dr 是在新目录中创建一个包含以下内容的文件:
import {compareTwoStrings, findBestMatch} from 'string-similarity';
export {compareTwoStrings, findBestMatch};
Run Code Online (Sandbox Code Playgroud)
然后在该目录中运行以下命令:
npm init -y
npm install --save-dev string-similarity
npx esbuild index.js --bundle --global-name=stringSimilarity --outfile=StringSimilarity.js
Run Code Online (Sandbox Code Playgroud)
然后,您可以将内容复制到Apps 脚本编辑器中的StringSimiliarity.js新文件中。导出的函数可在您自己的as和.gs中使用。Code.gsstringSimilarity. compareTwoStrings()stringSimilarity.findBestMatch()
(如果您不想自己捆绑它,可以在这个 gist中找到该esbuild过程的输出。但是一般步骤应该适用于 不需要 Node 或特定于浏览器的运行时环境的大多数模块。)string-similaritynpm
默认情况下,Google Apps 脚本文件可以访问 Google API,例如 G Suite 服务中的电子表格服务: https ://developers.google.com/apps-script/reference/spreadsheet/
默认情况下,GAS 项目(即该项目中的脚本)无法访问 Node.js 或任何其他框架。但是,一个 GAS 项目可以通过引用作为库包含另一个 GAS 项目。在 GAS 脚本编辑器中,使用菜单“资源”>“库...”,通过设置源项目的项目密钥(以及一些其他源项目属性)将外部 GAS 项目添加为库。
因此,如果您有一个依赖于外部资源(如 Node.js)的 Javascript,那么require如果您可以找到一个使用相同 API 提供相同服务的外部 GAS 项目,您可以将其作为脚本库提供。您省略了require原始脚本中的语句,因为它们被我提到的 GAS 库依赖项配置所替换。
如果您的原始脚本及其依赖项都是开源的,您可以为原始脚本中的每个依赖项级别创建 GAS 项目。您已经可以找到一些流行的 JS 框架脚本作为 GAS 库。
GAS 还允许将外部资源打包为 Web 应用程序和其他打包格式。它们可以与相应的技术一起使用,其中一些技术已经可以从其他开发人员那里获得。