企业可利用 Google Apps Script 从 Google 表格中提取数据,自动生成仅含所需信息的个性化 Google 文档,从而显著提升运营效率。
以一家中型“线上+线下”零售商为例,该公司为每位主要供应商制定了详细的月度营销计划及预算表。
Google 表格中包含为每位主要供应商制定的详细营销计划(示例展示四位供应商2018年2月情况)。
营销专家需向每位供应商提供营销提案。若供应商接受,将支付约占推广成本一半的联合广告费用。
若需为100位供应商创建提案,手动复制粘贴数据至100个文档极其耗时。此时,编写简短的 Google Apps Script 即可实现流程自动化。
什么是 Google Apps Script
Google Apps Script 是一种基于 JavaScript 的脚本语言,旨在增强 Google Docs、Sheets 等应用的功能。通过它,您可以自定义 Google 应用并创建新功能。本例中,我们将利用它从策略电子表格提取数据,批量生成营销提案。
关联 Google Apps Script
首次使用需将其与 Google Drive 关联,步骤如下:
- 打开 Google Drive,点击齿轮图标选择“设置”(Settings)。
- 点击“管理应用”(Manage Apps)> “连接更多应用”(Connect more apps)。
- 搜索并启用 Google Apps Script。
将 Google Apps Scripts 与 Google Drive 进行关联。
创建 Google Docs 模板
在关联好 Drive 后,需在 Google Docs 中创建营销提案模板。文档应包含所有重复使用的文案,并使用唯一占位符引用表格内容(如用 ##Supplier## 代表供应商名称)。
创建模板时请使用唯一占位符,以便后续替换为 Google Sheet 中的信息。
创建并配置 Google Apps Script
在 Google Drive 空白处右键单击,选择“更多”> “Google Apps Script”。若未找到该选项,请确认已完成上述关联操作。
在 Drive 中右键单击即可创建新的 Google Apps Script。
进入编辑器后,需启用 Sheets API:
- 点击 Resources(资源)> Advanced Google Services(高级 Google 服务)。
- 找到 Sheets API 并开启,随后点击 Google API Console(Google API 控制台)。
- 搜索“Sheets API”并点击 Enable API(启用 API)。
- 返回编辑器点击 OK。
在编辑器中启用包括 Sheets API 在内的相关服务。
设置变量:电子表格与模板
在编辑器中定义 createDocument() 函数,并设置三个核心变量:headers、tactics 和 templateId。
var headers = Sheets.Spreadsheets.Values.get('1U-6...', 'A2:I2');
var tactics = Sheets.Spreadsheets.Values.get('1U-6...', 'A3:I6');
var templateId = '18PzF...';
前两个变量通过 Sheets.Spreadsheets.Values.get() 访问策略表。第一个参数为电子表格 ID(可在浏览器地址栏获取),第二个参数指定数据区域(如标题行“A2:I2”,数据行“A3:I6”)。第三个变量 templateId 则为模板文档 ID。
在浏览器地址栏中可找到 Google 电子表格或文档的唯一 ID。
根据实际行列位置定义数据访问区域,例如标题区 A2:I2 和数据区 A3:I6。
遍历电子表格数据
由于 Google Apps Script 不支持部分新版 JS 特性,需使用 for 循环处理数组数据。
for(var i = 0; i < tactics.values.length; i++){
可通过 Logger 调试查看 API 返回内容:Logger.log(tactics);(运行后在“查看”>“日志”中查看)。
在循环内,定义变量存储供应商名称:
var supplier = tactics.values[i][0];
tactics.values 是二维数组,[i] 指向当前行,[0] 指向第一列(供应商名称)。例如循环首次运行时指向 A3(Awesome Inc.),下次指向 A4(Best Company)。
tactics 对象作为二维数组,其 [0] 索引对应每行的供应商名称字段。
复制并重命名模板
复制模板并获取新文档 ID:
var documentId = DriveApp.getFileById(templateId).makeCopy().getId();
注:DriveApp API 可能需单独启用。为避免文件名混淆,建议重命名新文档:
DriveApp.getFileById(documentId).setName('2018 ' + supplier + ' Marketing Proposal');
更新文档内容
获取新文档主体并替换占位符:
var body = DocumentApp.openById(documentId).getBody();
body.replaceText('##Supplier##', supplier);
接着调用 parseTactics 函数添加策略列表:
parseTactics(headers.values[0], tactics.values[i], body);
parseTactics 函数逻辑如下(注意索引从1开始,跳过供应商名称列):
function parseTactics(headers, tactics, body){
for(var i = 1; i < tactics.length; i++){
if(tactics[i] != ''){
body.appendListItem(headers[i] + ' | ' + tactics[i] + ' net')
.setGlyphType(DocumentApp.GlyphType.BULLET);
}
}
}
此处采用短路求值判断策略是否有值,若有则添加项目符号列表项。
JavaScript 数组索引从0开始,因此策略数据需从索引1开始遍历。
执行脚本生成文档
在编辑器下拉菜单选择“createDocument”并点击“Run”。
确认选择正确函数后点击运行。
脚本将在模板所在文件夹生成定制化营销提案,每个文档均包含对应供应商名称及专属策略。
生成的营销提案自动保存在与模板相同的文件夹中。
最终提案针对每位供应商量身定制,仅展示相关策略内容。
完整脚本参考
function createDocument() {
var headers = Sheets.Spreadsheets.Values.get('1U-6Fa6GF62dLI0NAhAMWdaSsEWvY4FDhDWLUVxaCv24', 'A2:I2');
var tactics = Sheets.Spreadsheets.Values.get('1U-6Fa6GF62dLI0NAhAMWdaSsEWvY4FDhDWLUVxaCv24', 'A3:I6');
var templateId = '18PzFAptRi36PR8CvJ2rVr3IVCGBMCNoCsG7UpOymPHc';
for(var i = 0; i < tactics.values.length; i++){
var supplier = tactics.values[i][0];
// 复制模板文件
var documentId = DriveApp.getFileById(templateId).makeCopy().getId();
// 重命名副本
DriveApp.getFileById(documentId).setName('2018 ' + supplier + ' Marketing Proposal');
// 获取文档主体
var body = DocumentApp.openById(documentId).getBody();
// 替换供应商名称
body.replaceText('##Supplier##', supplier);
// 添加策略列表
parseTactics(headers.values[0], tactics.values[i], body);
}
}
function parseTactics(headers, tactics, body){
for(var i = 1; i < tactics.length; i++){
if(tactics[i] != ''){
body.appendListItem(headers[i] + ' | ' + tactics[i] + ' net')
.setGlyphType(DocumentApp.GlyphType.BULLET);
}
}
}
