我写这篇文章是为了了解如何在一个 Google 电子表格文件中的多个选项卡(工作表)上运行脚本。
1.我想用脚本做什么:
2.电子表格中所有标签的背景:
3.我遇到的问题:
step1:写下标签Apple的代码并保存,脚本将在Apple上运行。
<块引用>step2:写下标签 Banana 的代码(在同一个脚本文件中,紧跟在 Apple 的代码之后)并保存,脚本将在 Banana 上工作,但不再在 Apple 上工作。
4.到目前为止我尝试过的(不起作用):
5.我使用的代码:
function onEdit(e) {
addTimestamp(e);
}
function addTimestamp(e){
var startRow = 2;
var targetColumn = 24;
var ws = "Apple";
var row = e.range.getRow();
var col = e.range.getColumn();
if(col === targetColumn && row >= startRow && e.source.getActiveSheet().getName() === ws){
var time = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd');
e.source.getActiveSheet().getRange(row,25).setValue(time);
}
}
function addTimestamp(e){
var startRow = 2;
var targetColumn = 66;
var ws = "Banana";
var row = e.range.getRow();
var col = e.range.getColumn();
if(col === targetColumn && row >= startRow && e.source.getActiveSheet().getName() === ws){
var time = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd');
e.source.getActiveSheet().getRange(row,67).setValue(time);
}
}
答案 0 :(得分:0)
回答我自己的问题,因为我刚刚找到了出路。 超级欢迎任何其他解决方案!
简而言之,我使用 if 函数来连接每个选项卡的代码。
我使用的代码如下所示:
function onEdit(e) {
addTimestamp(e);
}
function addTimestamp(e){
var row = e.range.getRow();
var col = e.range.getColumn();
if(e.source.getActiveSheet().getName() === "Apple" && col === 23 && row >= 2){
var time = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd');
e.source.getActiveSheet().getRange(row,24).setValue(time);}
if(e.source.getActiveSheet().getName() === "Banana" && col === 55 && row >= 2){
var time = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd');
e.source.getActiveSheet().getRange(row,56).setValue(time);}
答案 1 :(得分:0)
status
是 status
列的标题值,您可以使用 getRange(a1Notation) 和 findIndex 以编程方式查找此标题的列索引;无需为所有工作表明确指定(当只有两张工作表时这是可行的,但如果使用 6 张工作表可能会很烦人)。考虑到前面几点,您的代码可以大大简化:
function addTimestamp(e) {
const range = e.range;
const sheet = range.getSheet();
const statusColumn = sheet.getRange("1:1").getValues()[0]
.findIndex(header => header === "status") + 1;
if (range.getColumn() === statusColumn && range.getRow() > 1) {
const time = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd');
range.offset(0,1).setValue(time);
}
}
如果您还想按标题名称查找 timestamp
列,只需替换:
range.offset(0,1).setValue(time);
有了这个:
const timestampColumn = sheet.getRange("1:1").getValues()[0]
.findIndex(header => header === "timestamp") + 1;
sheet.getRange(range.getRow(), timestampColumn).setValue(time);