Google表格是一种功能强大的基于云的电子表格工具,可让您执行Microsoft Excel中几乎可以做的所有事情。但是Google表格的真正功能是它附带的Google脚本功能。
Google Apps脚本是一种后台脚本工具,不仅可以在Google表格中 起作用,而且还可以用于Google文档,Gmail ,谷歌分析 以及几乎所有其他Google云服务。它使您可以自动化那些单独的应用程序,并将每个应用程序彼此集成。
在本文中,您将学习如何开始使用Google Apps脚本,如何在Google表格中创建基本脚本以读取和写入单元格数据以及最有效的高级Google表格脚本功能。
如何创建Google Apps脚本
您现在就可以开始在Google表格中创建第一个Google Apps脚本。
为此,请从菜单中选择工具,然后选择脚本编辑器。
这将打开脚本编辑器窗口,并且默认为名为myfunction()的函数。强>。在这里您可以创建和测试Google脚本。
<!-In_content_1全部:[300x250] / dfp:[640x360]->
要尝试一下,请尝试创建一个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 Sheets脚本功能(通过选择“运行”图标),您需要提供脚本授权以在您的Google帐户上运行。
允许权限以继续。脚本运行后,您将看到脚本将计算结果写入目标单元格。
现在,您知道如何编写基本的Google Apps脚本功能了,让我们来看一些更高级的功能。
使用getValues加载数组
您可以将通过使用脚本对电子表格中的数据进行脚本化的概念带到一个新的水平。如果您使用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); } }
像上面一样保存并运行此脚本。您会看到所有结果都填充到电子表格的第2列中。
您会注意到,引用数组变量中的单元格和行与使用getRange函数不同。
数据[i] [0]是指数组维,其中第一维是行,第二维是列。两者都从零开始。
getRange(i + 1,2)指的是当i = 1时第二行(因为第1行是标题),而2是存储结果的第二列。
使用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 feed
您可以将以前的Google表格脚本功能和URLFetchApp结合使用,以从任何网站提取RSS提要,并针对最近发布到该网站的每篇文章在电子表格中写一行。
基本上,这是一种创建自己的RSS feed阅读器电子表格的DIY方法!
执行此操作的脚本也不太复杂。
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函数,您可以将这些项目放入RSS feed中每个项目的相应列中。
工作表中的输出将看起来像像这样的东西:
将RSS feed URL嵌入到脚本中,您可以在工作表中的URL字段中添加一个字段,然后再创建多个工作表-每个要监视的网站都包含一个工作表。
连接字符串并添加回车符
您可以通过添加一些文本操作功能使RSS电子表格更进一步,然后使用电子邮件功能向您发送一封包含所有新帖子摘要的电子邮件为此,请在上一节中创建的脚本下,添加一些脚本以提取电子表格中的所有信息。
您将希望通过将来自用于将RSS数据写入电子表格的同一“项目”数组中的所有信息进行解析,来构建主题行和电子邮件文本主体。
为此,可通过在“项” For循环之前放置以下行来初始化主题和消息。
var subject = ‘Latest 10 articles published at mysite.com’
var message = ‘’
然后,在末尾for循环的“ items”(在appendRow函数之后),添加以下行。
message = message + title + '\n' + link + '\n' + date + '\n' + desc + '\n' + '\n \n';
“ +”符号会将所有四个项连接在一起,后跟“ \ n”在每行之后返回回车。在每个标题数据块的末尾,您需要两次回车才能得到格式正确的电子邮件正文。
处理完所有行后,“ body”变量将保存整个电子邮件字符串。现在您就可以发送电子邮件了!
如何在Google Apps脚本中发送电子邮件
Google脚本的下一部分将要发送通过电子邮件发送“主题”和“正文”。在Google脚本中执行此操作非常容易。
var emailAddress = [email protected];
MailApp.sendEmail(emailAddress, subject, message);
MailApp是Google Apps脚本中非常方便的类,可让您访问Google帐户的电子邮件服务以发送或接收电子邮件。因此,带有sendEmail功能的单行使您可以发送任何电子邮件 仅包含电子邮件地址,主题行和正文。
这就是生成的电子邮件的外观。
结合提取功能网站的RSS提要,将其存储在Google表格中,然后通过包含的URL链接发送给自己,这使得跟踪任何网站的最新内容非常方便。
这仅仅是功能的一个示例可以在Google Apps脚本中使用,以自动执行操作并集成多个云服务。