如何将OnEdit脚本转换为运行按钮脚本(将规则中的单元格从1张复制到另一张)

我已经制作了一个运行良好的脚本来复制单元格* OnEdit(表格2上的col16) Col16 =“是”)到工作表(现在是Col4)上的自定义列的最后一行。但是我在工作表上有一个基于查询的数据,因此我的脚本只有在我用手输入“是”时才复制数据。这就是为什么现在我需要按按钮来运行这个脚本,或者可能是一个时间驱动的触发器。无法通过按钮使其工作。如何通过点击按钮来更改以下脚本以使其可以工作?如何将OnEdit脚本转换为运行按钮脚本(将规则中的单元格从1张复制到另一张)

function onEdit(e) { 

var ss = SpreadsheetApp.getActive();

var sheet = ss.getActiveSheet();

if (sheet.getName() !== '2' || e.range.getColumn() !== 16 || e.value !== 'Yes') return;

var value = e.range.offset(0,-12,1,1).getValue();

sheet = e.source.getSheetByName('1');

var grd = sheet.getRange("D:D").getValues();

var maxIndex = grd.reduce(function(maxIndex, row, index) {

return row[0] === "" ? maxIndex : index;

}, 0);

sheet.getRange(maxIndex+2,e.range.getColumn()-12,1,1).setValue(value);

}

更新:我试图改变我这样的脚本,它分配给按钮,点击按钮 - 它说“跑.....那就完了......”但之后不要复制任何东西(但它在OnEdit(e)时有效,并且我没有收到任何错误 但是,只是将“OnEdit(e)”更改为“copymissings()”是不够的,我需要更改在一些代码,但我不知道究竟是什么请帮助:

function copymissings() { 

var s = SpreadsheetApp.getActive();

if (s.getName() !== '2' || range.getColumn() !== 16 || value !== 'Yes') return;

var value = range.offset(0,-12,1,1).getValues();

sht = s.getSheetByName('1');

var grd = sheet.getRange("D:D").getValues();

var maxIndex = grd.reduce(function(maxIndex, row, index) {

return row[0] === "" ? maxIndex : index;

}, 0);

sht.getRange(maxIndex+2,range.getColumn()-12,1,1).setValues(value);

}

可视化: CLICK TO SEE GIF

回答:

好的,非常感谢来自“Plus”谷歌应用脚​​本论坛的Edward Ulle。

我已经制作了与我在帖子中提供的脚本相同的工作版本,该脚本自动运行OnEdit。

如果该行包含col16中的“是”与Sheet-1 col4,则以下脚本将复制Sheet-2 Col4中的单元格。一切都可选。

function copymissings() { 

try {

var ss = SpreadsheetApp.getActiveSpreadsheet();

// Source sheet

var shs = ss.getSheetByName("2");

// Values from Sheet2

var vs = shs.getRange(1,1,shs.getLastRow(),shs.getLastColumn()).getValues();

// Destination sheet

var shd = ss.getSheetByName("1");

// Get the destination range

var rd = shd.getRange("D:D");

// Gets a 2D array

var vd = rd.getValues();

var j = 1;

// Get offset j to first empty row

for(j=0; j<vd.length; j++) {

if(vd[j][0] == 0) break;

}

// Assuming you want to do for every row in Sheet2

for(var i=0; i<vs.length; i++) {

if(vs[i][15] == "Yes") { // Column 16 is index 15

// Use offset from last row of destination sheet

rd.offset(j,0,1,1).setValue(vs[i][3]); // Copy to column 4 (0)

j++; // Increment to next row

}

}

}

catch(err) {

Logger.log(err);

}

}

回答:

我想你在这里混合了两个概念。 onEdit()是当用户更改单元格的值时运行AUTOMATICALLY的触发器。然而,你想要做的是手动,因为用户在事件触发时负责。

有关如何创建UI按钮,请参阅HTML Service: Create and Serve HTML。您可以查看实际样品here。

以上是 如何将OnEdit脚本转换为运行按钮脚本(将规则中的单元格从1张复制到另一张) 的全部内容, 来源链接: utcz.com/qa/263980.html

回到顶部