跳转到内容

使用 Google Apps Script 开发网页应用/语法

来自 Wikibooks,开放的书籍,开放的世界

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]))
华夏公益教科书