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); 
} 
相關問題