使用 Google Apps Script 开发网页应用/语法
Ajax 代表“异步 JavaScript 和 XML”,它使网页能够在不重新加载页面的情况下与服务器通信。
在 Google Apps Script 中,可以使用 google.script.run
工具来实现。此命令有多种变体,可以在 Google 服务器上运行 JavaScript 代码,并可能将信息返回到网页。
例如,如果您想将姓名发送到服务器,然后检查它是否在电子表格中,并返回 true 如果存在,返回 false 如果不存在,您可以将其设置为变量,您可以这样做
首先是服务器端代码
function doGet(){
var t=HtmlService.createFileFromTemplate("main");
return t.evaluate();
}
function runOnServer(name){
return checkInSpreadsheet(name); // this would be a function you'd write to check the spreadsheet
}
现在是“main.html”中包含您要执行的 JavaScript 的部分
google.script.withSuccessHandler(dealWithReturn).runOnServer("Andy");
function dealWithReturn(e){
if(e) {
alert("yep that name's in there");
} else {
alert("nope, that name's not in there");
}
流程是:主 JavaScript -> 服务器上的函数 -> 将数据返回到您的 SuccessHandler -> 您的 successHandler 执行某些操作。
一个简单(而且可以原谅)的错误是在将数据在 Google 表格和 JavaScript 之间来回移动时,数组编号发行人会导致行或列偏移。JavaScript 从零开始编号,而 Google 表格从 1 开始编号。以下是一个示例
var coolArray=[1,2,3,5,7,11]; // why not 9? because it's not prime!
var myCoolSheet = SpreadsheetApp.getActive().getSheetByName("my cool sheet");
// this is a dumb way to put data into a sheet but it points out the numbering difference
coolArray.forEach((item,i)=>{
// myCoolSheet.getRange(i,1).setValue(item); this fails
myCoolSheet.getRange(i+1,1).setValue(item); // this works
}) // don't forget to close everything
如果您需要筛选数组,请使用,嗯,filter
var people = [{name: "Andy", age: 48}, {name: "Ash", age: 20}, {name: "Char", age: 18}];
// get people under 30:
var youngPeople = people.filter(person=>person["age"]<30) // note that "person" didn't need to be initialized
与 查找、forEach 和 映射 一样,您也可以使用索引,如果您愿意
var people = [{name: "Andy", age: 48}, {name: "Ash", age: 20}, {name: "Char", age: 18}];
// get people under 30 but not those with an index less than 2
var youngPeople = people.filter((person,i)=>person["age"]<30&&i>=2) // note that "person" didn't need to be initialized
如果您需要在数组中查找元素,find
非常有用
var array=[{name: "Andy", age: 48}, {name: "Ash", age: 20}]; // an array of objects
var ashObject = array.find(person=>person["name"]=="Ash"); // returns the first element that gives "true" for the check
如果您需要遍历数组并对每个元素执行操作,您可以当然这样做
var array=["apple", "orange", "banana"];
for (var i=0; i<array.length; i++) {
doSomethingCool(array[i]);
}
但您也可以这样做,我认为它更易读
var array=["apple", "orange", "banana"];
array.forEach(fruit=>doSomethingCool(fruit));
请注意,您不必以这种方式初始化“i”变量。
如果您需要访问项目(水果)及其在数组中的位置(索引)
var array=["apple", "orange", "banana"];
array.forEach((fruit,i)=>doSomethingElseCool(fruit,i));
请注意 fruit, i
周围的括号,它们使这种魔法起作用。还要注意,您仍然不必声明 i 变量!
如果您要查看数组是否包含特定元素,请尝试 includes
var myArray=["apple", "orange", "banana"];
if(myArray.includes("green beans")) {
// do something to say that green beans isn't in the array
}
与 forEach 类似,map
是一个很棒的方法,可以基于现有数组创建新数组。假设您想在数组中的一些文本周围添加一个标签
var array=["apple", "orange", "banana"];
var newarray = array.map(fruit=>`<b>${fruit}</b>`)
您也可以轻松访问数组中项目的索引
var array=["apple", "orange", "banana"];
var newarray = array.map((fruit,i)=>`${fruit} is at index ${i} in the array`)
对数组进行排序非常有价值,有时也很痛苦。假设您有一个来自电子表格的二维数组,其中包含“姓名”、“年龄”、“电子邮件”列。如果您想按年龄对它们进行排序,请执行以下操作
var data=... // data from spreadsheet
data.sort((a,b)=>a[1]-b[1]);
实际上,sort 需要在确定谁应该排在前面时返回 true 或 false,但通过减去两个数字,如果得到零或负数,则将其视为 false,而正数将被视为 true。
如果您想按年龄和姓名(按字母顺序)排序,您可以这样做
var data=... // data from spreadsheet
data.sort((a,b)=>(a[1]>b[1])&&(a[0] < b[0]))