2

我有一个简单的电子表格,包含多行,我想自动将按钮添加到每一行。如何在Google电子表格中添加每行按钮?

单击此按钮将删除整行并将其移动到另一个电子表格。

我在网上找过,并找不到一种方法将按钮添加到电子表格。有些人建议插入图纸并分配宏,但看起来像最新版本缺少此功能。

我也读过关于谷歌应用程序sript。我能够将按钮添加到菜单,但不能直接添加到电子表格的每一行。

关于如何更好地实现这一目标,您有任何建议或建议吗?

+0

我的理解是使用一列作为菜单脚本的条件将其复制到另一个电子表格。 – Jacobvdb

+0

@Jacobvdb,感谢您的建议。如果我这样做,我如何捕获单元格编辑事件? – user194076

+0

好吧,您不需要首先标记具有特定条件的特定列中的所有行,而是使用通过菜单激活的脚本,然后将具有该条件的所有行复制到另一个电子表格。 [菜单手册](https://developers.google.com/apps-script/articles/defining_menus) – Jacobvdb

回答

1

我建议你创建在每行的以“移动列”列表数据验证结束的列(如10),并创建像这样

function onEdit(eventInfo) { 
    if (eventInfo.range.getColumn() == 10 && eventInfo.value == "Move Row") 
    { 
    var ss = eventInfo.source; 
    var row = eventInfo.range.getRow(); 
    var range = ss.getRange(row, 1, 10) // this is your range, do with it what you will 
    } 

} 
0

的onEdit功能,所以这个脚本是不是完全是我自己的工作,但是我正在帮忙的工作的结果。

它会查看源表单,查看您指定的列(按编号),并在此工作表中查找值。

如果匹配,它会将该行移动到另一张表格中,在您选择的绘图仪内。

function moveRowInternalSheet() 
{ 

    var sourceSheet = ""; 
    var columnNumberToWatch = ; 
    var valueToFind = ""; 
    var destinationSheet = ""; 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName(sourceSheet); 

    var values = sheet.getDataRange().getValues(); 
    var counter = 1; //starts looking in second row, due to header 
    var archive = []; 



    while (counter < values.length) 
    { 


    if (values[counter][columnNumberToWatch - 1] == valueToFind) 
    { 


     archive.push(values.splice(counter, 1)[0]); 
    } 
    else 
    { 
    // If the value to find is not found. Then increment the counter by 1 

     counter++; 
    } 
    } 





    var archiveLength = archive.length; 




    if (!archiveLength) return; 



    var targetSheet = ss.getSheetByName(destinationSheet); 


    var lastRow = targetSheet.getLastRow(); 



    var requiredRows = lastRow + archiveLength - targetSheet.getMaxRows(); 



    if (requiredRows > 0) targetSheet.insertRowsAfter(lastRow, requiredRows); 



    targetSheet.getRange(lastRow + 1, 1, archiveLength, archive[0].length).setValues(archive); 


    sheet.clearContents(); 


    sheet.getRange(1, 1, values.length, values[0].length).setValues(values); 
} 
相关问题