您需要知道的 5 个 Google 表格脚本功能

Google 表格(Google Sheets)是一款功能强大的基于云的电子表格工具,可让您完成几乎所有可以在Microsoft Excel 中(Microsoft Excel)完成的操作。但Google Sheets(Google Sheets)的真正强大之处在于它附带的Google Scripting功能。(Google Scripting)

Google Apps脚本是一种后台脚本工具,不仅适用于 Google 表格(in Google Sheets),还适用于 Google Docs、Gmail、Google Analytics和几乎所有其他Google云服务。它使您可以自动化这些单独的应用程序,并将这些应用程序中的每一个相互集成。

在本文中,您将了解如何开始使用Google Apps脚本、在(Google Apps)Google 表格(Google Sheets)中创建基本脚本以读取和写入单元格数据,以及最有效的高级Google 表格(Google Sheets)脚本功能。

如何创建 Google Apps 脚本(How to Create a Google Apps Script)

您现在可以开始从Google 表格中创建您的第一个(Google Sheets)Google Apps脚本。 

为此,请从菜单中选择工具,然后选择(Tools)脚本编辑器(Script Editor)

这将打开脚本编辑器窗口并默认使用名为myfunction()的函数。您可以在此处创建和测试您的Google 脚本(Google Script)

试一试,尝试创建一个谷歌表格(Google Sheets)脚本函数,该函数将从一个单元格读取数据,对其执行计算,并将数据量输出到另一个单元格。

从单元格获取数据的函数是getRange()getValue()函数。您可以按行和列识别单元格。因此,如果您在第 2 行和第 1 列(A 列)中有一个值,则脚本的第一部分将如下所示:

function myFunction() {
   var sheet = SpreadsheetApp.getActiveSheet();
   var row = 2;
   var col = 1;
   var data = sheet.getRange(row, col).getValue();
}

这会将来自该单元格的值存储在数据(data)变量中。您可以对数据执行计算,然后将该数据写入另一个单元格。所以这个函数的最后一部分是:

   var results = data * 100;
   sheet.getRange(row, col+1).setValue(results);
}

编写完函数后,选择要保存的磁盘图标。 

第一次像这样运行新的Google 表格(Google Sheets)脚本功能时(通过选择运行图标),您需要提供Authorization以便脚本在您的Google 帐户(Google Account)上运行。

允许权限继续。脚本运行后,您会看到脚本将计算结果写入目标单元格。

现在您已经知道如何编写基本的Google Apps脚本函数了,让我们来看看一些更高级的函数。

使用 getValues 加载数组(Use getValues To Load Arrays)

您可以通过使用数组将使用脚本对电子表格中的数据进行计算的概念提升到一个新的水平。如果您使用 getValues 在Google Apps脚本中加载变量,则该变量将是一个可以从工作表加载多个值的数组。

function myFunction() {
   var sheet = SpreadsheetApp.getActiveSheet();
   var data = sheet.getDataRange().getValues();

数据变量是一个多维数组,包含工作表中的所有数据。要对数据执行计算,请使用for循环。for 循环的计数器将遍历每一行,并且该列保持不变,具体取决于您要提取数据的列。

在我们的示例电子表格中,您可以对三行数据执行如下计算。

for (var i = 1; i < data.length; i++) {
   var result = data[i][0] * 100;
   sheet.getRange(i+1, 2).setValue(result); 
   }
}

像上面一样保存(Save)并运行这个脚本。您会看到所有结果都填充到电子表格的第 2 列中。

您会注意到在数组变量中引用单元格和行与使用 getRange 函数不同。 

data[i][0]指的是数组维度,其中第一个维度是行,第二个维度是列。这两个都从零开始。

getRange(i+1, 2)在 i=1 时引用第二行(因为第 1 行是表头),2 是存储结果的第二列。

使用 appendRow 写入结果(Use appendRow To Write Results)

如果您有一个想要将数据写入新行而不是新列的电子表格怎么办?

使用appendRow(appendRow)函数很容易做到这一点。此功能不会打扰工作表中的任何现有数据。它只会在现有工作表上附加一个新行。

例如,创建一个从 1 计数到 10 的函数,并在Counter列中显示一个具有 2 倍数的计数器。

这个函数看起来像这样:

function myFunction() {
   var sheet = SpreadsheetApp.getActiveSheet();

   for (var i = 1; i<11; i++) {
      var result = i * 2;
     sheet.appendRow([i,result]);
   }
}

以下是运行此函数时的结果。

使用 URLFetchApp 处理 RSS 提要(Process RSS Feeds With URLFetchApp)

您可以结合以前的Google Sheets脚本函数和URLFetchApp从任何网站提取RSS提要,并为最近发布到该网站的每篇文章在电子表格中写入一行。

这基本上是一种DIY方法来创建您自己的RSS提要阅读器电子表格!

执行此操作的脚本也不太复杂。

function myFunction() {
   var sheet = SpreadsheetApp.getActiveSheet();
   var item, date, title, link, desc; 
   var txt = UrlFetchApp.fetch("https://www.topsecretwriters.com/rss").getContentText();
   var doc = Xml.parse(txt, false);  

   title = doc.getElement().getElement("channel").getElement("title").getText();
   var items = doc.getElement().getElement("channel").getElements("item");   

// Parsing single items in the RSS Feed

for (var i in items) {
   item  = items[i];
   title = item.getElement("title").getText();
   link  = item.getElement("link").getText();
   date  = item.getElement("pubDate").getText();
   desc  = item.getElement("description").getText();
   
   sheet.appendRow([title,link,date,desc]);
}
}

如您所见,Xml.parse将每个项目从RSS提要中提取出来,并将每一行分隔为标题、链接、日期和描述。 

使用appendRow函数,您可以将这些项目放入(appendRow)RSS提要中每个项目的适当列中。

工作表中的输出将如下所示:

无需将RSS提要URL嵌入脚本,您可以在工作表中使用URL的字段,然后有多个工作表 - 每个您要监控的网站一张。

连接字符串(Concatenate Strings)添加(Add)回车(Carriage Return)

您可以通过添加一些文本处理功能使RSS电子表格更进一步,然后使用电子邮件功能向自己发送一封电子邮件,其中包含站点RSS提要中所有新帖子的摘要。

为此,在您在上一节中创建的脚本下,您需要添加一些脚本来提取电子表格中的所有信息。 

您需要通过将用于将RSS数据写入电子表格的同一“items”数组中的所有信息一起解析来构建主题行和电子邮件文本正文。 

为此,通过在“items” For 循环之前放置以下几行来初始化主题和消息。

var subject = ‘Latest 10 articles published at mysite.com’
var message = ‘’

然后,在“items”for 循环的末尾(就在 appendRow 函数之后),添加以下行。

message = message + title + '\n' + link + '\n' + date + '\n' + desc + '\n' + '\n \n';

“+”符号将所有四个项目连接在一起,然后在每行后面加上“”作为回车符。在每个标题数据块的末尾,您需要两个回车符以获得格式良好的电子邮件正文。

处理完所有行后,“body”变量将保存整个电子邮件消息字符串。现在您可以发送电子邮件了!

如何在 Google Apps 脚本中发送电子邮件(How To Send Email In Google Apps Script)

您的Google 脚本(Google Script)的下一部分将通过电子邮件发送“主题”和“正文”。在Google Script(Google Script)中执行此操作非常容易。

var emailAddress = [email protected];
MailApp.sendEmail(emailAddress, subject, message);

MailAppGoogle Apps脚本中的一个非常方便的类,可让您访问您的 Google 帐户的电子邮件服务以发送或接收电子邮件。多亏了这一点,带有 sendEmail 功能的单行可以让您发送任何电子邮件(send any email),只需电子邮件地址、主题行和正文。

这就是生成的电子邮件的样子。 

结合提取网站的RSS提要、将其存储在Google 表格(Google Sheet)中并将其发送给您自己以及包含URL链接的功能,可以非常方便地跟踪任何网站的最新内容。

这只是Google Apps脚本中用于自动执行操作和集成多个云服务的强大功能的一个示例。



About the author

我是一名免费软件开发人员和 Windows Vista/7 倡导者。我已经写了数百篇关于操作系统相关主题的文章,包括提示和技巧、修复指南和最佳实践。我还通过我的公司 Help Desk Services 提供与办公室相关的咨询服务。我对 Office 365 的工作原理、功能以及如何最有效地使用它们有着深刻的理解。



Related posts