如何免费使用 Google Apps Script 实现公司流程自动化
在我们 Studio 和一些自有产品中使用的一系列工具和服务中,Google App Scripts 是我们最喜欢的工具之一。这款工具允许我们通过与 Google 表格、文档、云端硬盘等 Google 服务进行交互,免费地自动执行重复性任务和流程。
Google App Scripts 入门
要创建我们的第一个脚本,我们可以通过访问Google Apps Script 页面来完成。这是该工具的主页面,我们将在其中看到所有创建的脚本、执行日志以及相关的触发器。
我们还可以直接从想要关联的 Google 工具创建脚本,对于 Sheets,我们可以通过单击工具 → 脚本编辑器来完成。
这将在云端打开一个开发环境,可以在其中直接编写和执行脚本代码。
现在我们知道了如何创建脚本,我们将通过两个示例学习允许我们开始创建自动化流程的基本功能。
用于更新 Billbot 中货币的脚本
我们要介绍的第一个示例是一个脚本,我们使用该脚本获取和格式化我们在 Studio 中创建的Billbot 应用程序中使用的货币列表。
我们首先要解决的是如何从脚本向 API 发出请求。为此,我们需要使用UrlFetchApp类来实现这一点,它是 AppScripts 中最有用的方法之一。
在我们的例子中,考虑到 API 返回的数据结构,我们不仅需要发出一个请求,还需要发出多个请求。为此,我们将使用fetchAll
允许同时发出多个请求的方法。
代码如下:
function myFunction() {
var API = 'API_URL';
var EUR = API + '&base=EUR';
var USD = API + '&base=USD';
var GBP = API + '&base=GBP';
var CAD = API + '&base=CAD';
var AUD = API + '&base=AUD';
var CHF = API + '&base=CHF';
var MXN = API + '&base=MXN';
var RUB = API + '&base=RUB';
var INR = API + '&base=INR';
var BRL = API + '&base=BRL';
var DKK = API + '&base=DKK';
var SEK = API + '&base=SEK';
var NOK = API + '&base=NOK';
var HRK = API + '&base=HRK';
var NZD = API + '&base=NZD';
var CZK = API + '&base=CZK';
var JPY = API + '&base=JPY';
var PLN = API + '&base=PLN';
var RON = API + '&base=RON';
var THB = API + '&base=THB';
var AED = API + '&base=AED';
var HKD = API + '&base=HKD';
var HUF = API + '&base=HUF';
var ILS = API + '&base=ILS';
var SGD = API + '&base=SGD';
var TRY = API + '&base=TRY';
var ZAR = API + '&base=ZAR';
var SAR = API + '&base=SAR';
var BGN = API + '&base=BGN';
var QAR = API + '&base=QAR';
var ISK = API + '&base=ISK';
var MAD = API + '&base=MAD';
var RSD = API + '&base=RSD';
var ARS = API + '&base=ARS';
var BHD = API + '&base=BHD';
var BOB = API + '&base=BOB';
var CLP = API + '&base=CLP';
var CNY = API + '&base=CNY';
var COP = API + '&base=COP';
var EGP = API + '&base=EGP';
var IDR = API + '&base=IDR';
var KRW = API + '&base=KRW';
var PEN = API + '&base=PEN';
var PHP = API + '&base=PHP';
var UAH = API + '&base=UAH';
var UYU = API + '&base=UYU';
var GTQ = API + '&base=GTQ';
var PYG = API + '&base=PYG';
var response = UrlFetchApp.fetchAll([
EUR,
USD,
GBP,
CAD,
AUD,
CHF,
MXN,
RUB,
INR,
BRL,
DKK,
SEK,
NOK,
HRK,
NZD,
CZK,
JPY,
PLN,
RON,
THB,
AED,
HKD,
HUF,
ILS,
SGD,
TRY,
ZAR,
SAR,
BGN,
QAR,
ISK,
MAD,
RSD,
ARS,
BHD,
BOB,
CLP,
CNY,
COP,
EGP,
IDR,
KRW,
PEN,
PHP,
UAH,
UYU,
GTQ,
PYG,
]);
Logger.log(response);
}
为了查看请求结果,我们可以使用Logger.log
。这相当于 JavaScript console.log
,但它允许我们在 App Scripts 调试器中查看结果。要查看记录,我们可以按键盘上的 ctrl + Enter 键,或者如果您使用的是 Mac,则按 cmd 键。
获取数据后,下一步就是根据需要进行格式化。为此,我们只需使用 JavaScript Reduce 函数,并将其结果转换为字符串。
var data = response.reduce(function (previous, current) {
var currentJson = JSON.parse(current);
var currencyData = currentJson.rates;
var currency = currentJson.base;
var currencyDataWithBase = { ...currencyData, [currency]: 1 };
return { ...previous, [currency]: currencyDataWithBase };
}, {});
var dataParsed = JSON.stringify(data)
数据格式化后,我们需要将其存储在电子表格中。这可以使用SpreadSheetApp类来完成。该类的主要方法是getActive()
,它允许我们获取与脚本关联的文件的引用,以及getSheetByName()
,它允许我们建立关联文件的特定工作表的引用。
一旦我们在变量中获得了工作表的引用,我们就可以使用它来读取和存储其行和列中的数据。使用getRange
和setValue
方法,我们可以在单元格内写入数据,使用getValue
方法,我们将获取其中的值。
具体来说,在我们的脚本中,我们希望将获得的所有数据存储在电子表格的第一个单元格中,因此我们可以使用这四行代码来实现这一点。
var ratesSpreadSheet = SpreadsheetApp.getActive();
var dbSheet = ratesSpreadSheet.getSheetByName('db');
dbSheet.getRange(1, 1).setValue(dataParsed);
SpreadsheetApp.flush();
脚本执行后,我们会在电子表格的 1,1 单元格中找到输出。我们可以看到,它填充了从 API 获取的数据,并根据我们的需要进行了格式化。
只需利用我们刚刚看到的Logger
、SpreadSheetApp
和UrlFetchApp
类,我们就能凭借一些 JavaScript 知识和一些创造力创建出非常强大的脚本。以下示例就是一个很好的例子:我们利用这三个 API为初创公司构建了一个自动发票创建系统。
Cravy Partners计费系统
在Cravy,我们每周都要为平台的合作餐厅开具发票。最初,我们用谷歌电子表格手动创建发票,然后转换成 PDF 格式。当我们合作的餐厅超过 10 家时,这个过程就变得非常繁琐,可能需要一整天的时间。
每家餐厅都有两份文件:包含我们服务佣金的发票和包含与该佣金相关的所有订单的收据。
利用我们已经拥有发票模板以及对数据库和项目后端的完全控制权这一事实,我们决定创建一个可以执行以下操作的应用程序脚本:
- 创建一个带有当前日期的文件夹,以有组织的方式存储 Google Drive 中的文档。
- 通过向后端发出请求来获取每个餐厅的订单信息。
- 为每家餐厅创建一份 Google Sheets 模板副本,并用从 API 获得的信息填充它们。
- 将创建的副本存储在相应的文件夹中,并创建该文件的PDF版本。
在本文中,我们将重点展示 API 为我们提供的最有趣的选项,我们不会详细介绍脚本本身的逻辑,但如果您想查看完整的脚本 ,可以在 Github 上找到。
在 Google Drive 中创建文件夹
我们还没有见过的一个类是DriveApp,它允许我们对 Google Drive 文件夹和文件执行操作。
在我们的例子中,我们想要在特定的 Google Drive 文件夹中创建一个以日期为名称的新文件夹。
const now = new Date();
const billDay = new Date(now.setDate(now.getDate() + 1))
.toISOString()
.slice(0, 10);
// Creating the day folder to save the bills
const folderId = DriveApp.getFolderById('FOLDER-ID')
.createFolder(billDay)
.getId();
正如我们在图像中看到的那样,当我们进入文件夹时,可以在 url slug 的末尾找到FOLDER -ID 。
为每家餐厅创建一份 Google 表格模板
为了给每家餐厅创建一个电子表格,我们需要对每家餐厅执行相应的函数。我们可以通过一个简单的for 语句来实现。
for (var index = 0; index < restaurantsData.length; index++) {
fillSheetWithBillingData(
restaurantsData[index],
billDay,
firstDay,
lastDay,
folderId
);
}
一旦函数执行,它就会使用UrlFetchApp
我们在 Billbot 示例中看到的类从后端请求餐厅信息,然后我们在 JavaScript 中执行必要的操作以获取我们想要的格式的数据。
一旦我们有了这些数据,我们就可以继续使用以下代码行创建新的电子表格。
//Setting the reference to the original sheets
var billSheet = originalSpreadsheet.getSheetByName('Bill');
var ordersBillSheet = originalSpreadsheet.getSheetByName('OrdersBill');
//Create new restaurant sheet
var newBillSheet = SpreadsheetApp.create(
'Factura-' + restaurantName + '-' + billDay + ''
);
var newOrdersBillSheet = SpreadsheetApp.create(
'Annnexo-' + restaurantName + '-' + billDay + ''
);
//Copy the parent sheet content to the new created sheets
billSheet.copyTo(newBillSheet);
ordersBillSheet.copyTo(newOrdersBillSheet);
使用create()
和copyTo()
函数,我们创建两个新的空电子表格,然后复制作为模板的电子表格的内容。请记住,这会在 Google Drive 的根文件夹中创建文件,因此在最后一步,我们必须将这些文件移动到相应的文件夹,并将其从根文件夹中删除。
脚本的下一步是使用我们在上一个示例中看到的 SpreadsheetApp 类的和方法,用从 API 获取的信息填充我们刚刚创建的电子表格。getRange()
setValue()
将创建的副本存储在相应的文件夹中,并创建文件的PDF版本
最后一步是存储创建的两个电子表格并将其导出为 PDF。我们只需要一个小函数即可实现这一点。
function exportSomeSheets(
restaurantName,
folderId,
newBillSheet,
newOrdersBillSheet
) {
// Save the files in to the correspondent folder
var folder = DriveApp.getFolderById(folderId).createFolder(restaurantName);
var copyNewBillSheet = DriveApp.getFileById(newBillSheet.getId());
var copyNewOrdersBillSheet = DriveApp.getFileById(newOrdersBillSheet.getId());
folder.addFile(copyNewBillSheet);
folder.addFile(copyNewOrdersBillSheet);
folder.createFile(copyNewBillSheet);
folder.createFile(copyNewOrdersBillSheet);
DriveApp.getRootFolder().removeFile(copyNewBillSheet);
DriveApp.getRootFolder().removeFile(copyNewOrdersBillSheet);
}
该函数执行的步骤如下:首先在上一步生成的日期文件夹内创建一个以餐厅名称命名的文件夹。
然后将第二步中的电子表格粘贴到包含该addFile()
功能的餐厅名称的文件夹中。最后,它会创建包含该功能的 PDF 版本createFile()
。
最后,我们从根文件夹中删除文件以避免它们堆积。
结论
由此可见,借助 App Script 和我们的创造力,我们可以实现非常强大的功能,不仅能帮助我们处理日常事务,还能在月底节省数百小时。以上只是我们为实现部分运营自动化而实施的几个示例,但同样的方法可以应用于更多场景。
此外,使用 App Script 的另一个好处是它在平台限制内是一项完全免费的服务,因此我们可以免费拥有 cron 作业和其他自动化流程。
文章来源:https://dev.to/reboot-studio/how-to-use-google-apps-script-to-automate-processes-in-your-company-at-no-cost-3c88