google-apps-script - 每当插入新行时,创建一个新的电子表格并复制特定的单元格
问题描述
我有:
- 通过 zapier 自动接收新的 shopify 订单的谷歌表格
- 订单作为新行插入
- 下面的代码是一个容器绑定的简单触发器,可以通过转到谷歌表中的工具 > 脚本编辑器来访问
我想:
- 每当将行插入源电子表格时创建一个新电子表格这部分工作
- 要将特定信息从源电子表格复制到新电子表格,此部分不起作用
我最初使用 getActiveSpreadsheet 来获取 sourceSpreadsheet 变量,并认为在我创建新电子表格后,活动电子表格可能正在发生变化。为了解决这个问题,我使用 openByID 代替了 getActiveSpreadsheet,但该功能仍然无法正常工作。任何帮助将非常感激!
// Function will run automatically on a change to the spreadsheet by looking at the event object, or e
function onChange(e){
// Look in the log to see what type of change is represented by the event
Logger.log(e.changeType);
// Only run the rest of the function if the type of change represented by the event object is an inserted row
if(e.changeType=='INSERT_ROW'){
// Get the current spreadsheet that is the source
var sourceSpreadsheet = SpreadsheetApp.openById('File ID');
// Get the first sheet of the current spreadsheet (0 indexed)
var sourceSheet = sourceSpreadsheet.getSheets()[0];
// Get the last row of the sheet that has data in it
var lastrow = sourceSheet.getLastRow();
// Get the value on the last row, for 3 different columns
var sourceRange1 = sourceSheet.getRange(lastrow, 1).getValues();
var sourceRange2 = sourceSheet.getRange(lastrow, 2).getValues();
var sourceRange3 = sourceSheet.getRange(lastrow, 3).getValues();
// Create new destination spreadsheet
var newSpreadsheet = SpreadsheetApp.create("My New File Name");
// Get the first sheet of the new spreadsheet (0 indexed)
var newSheet = newSpreadsheet.getSheets()[0];
// Set destination range to put data to
var newRange = newSpreadsheet.getRange(1,1).setValues(sourceRange1)
var newRange2 = newSpreadsheet.getRange(1,2).setValues(sourceRange2)
var newRange3 = newSpreadsheet.getRange(1,3).setValues(sourceRange3)
}
}
解决方案
改变
var newRange = newSpreadsheet.getRange(1,1).setValues(sourceRange1);
至
var newRange = newSheet.getRange(1,1).setValues(sourceRange1);
应该可以解决您的问题。
该代码还可以优化为:
function onChange(e){
Logger.log(e.changeType);
if(e.changeType=='INSERT_ROW'){
var sourceSpreadsheet = SpreadsheetApp.openById('File ID');
var sourceSheet = sourceSpreadsheet.getSheets()[0];
var newSpreadsheet = SpreadsheetApp.create("My New File Name");
var newSheet = newSpreadsheet.getSheets()[0];
var lastrow = sourceSheet.getLastRow();
var sourceRange = sourceSheet.getRange(lastrow, 1, 1, 3).getValues();
newSheet.getRange(1,1,1,3).setValues(sourceRange);
}
}
参考:
推荐阅读
- ruby-on-rails - 其他任何人都会收到此错误“错误:无效选项:--with-passenger”
- angular - 如果电子邮件模式不匹配,如何使用 ngif 检查
- c - 如何检查 C 中的数组重复项
- c# - 如何在 EF6 中定义多级唯一索引约束
- html - 如何在父 div 之外隐藏 div?
- asp.net-mvc - SlidingExpiration 使用身份验证模式=“无”?
- kaa - 在 Ubuntu 18.10 上安装 kaa 单节点 0.10.0 或 0.11.0
- php - 根据多列中的 2 行值获取表中的值
- typescript - Promise中<>是什么意思
? - html - 在调整窗口大小时保持弹性项目固定