簡體   English   中英

我怎樣才能讓這個腳本運行在編輯上

[英]How can i get this Script to run onEdit

我試圖讓它自動運行,但是使用當前形式它只有在我手動運行代碼時才有效。

我在此表中還有另一個代碼文件,它也使用onEdit,如何將相同的onEdit合並到此代碼中,或者只要選擇列G“完成”就將其運行,然后將列H更改為“已發送”

function addValidation() {

  // Get the spreadsheet and active sheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();

  // Get the data as an Array you can iterate and manipulate
  var data = sheet.getDataRange().getValues();

  var rule = SpreadsheetApp.newDataValidation().requireValueInList(["Complete"]).build();

  // Loop the sheet
  for(var i=0; i<data.length; i++) {


    if(data[i][11] == "Complete") {


      sheet.getRange(i+1, 8).clear().setDataValidation(rule);

    }  {
      sheet.getRange(i+1, 8).clearDataValidations().setValue("Shipped");
    }
  }
}

幾件事:

if語句中,您沒有檢查G列 - 您正在檢查K(11)列。 如果要查看G,則需要將if更改為:

if(data[i][6].toString() == "Complete") {
  ...
}

你的邏輯是向后的,你錯過了else關鍵字來運行替代方案。 如果它與“完成” 匹配,它將標記為“已發貨”。 交換語句以正確填充單元格值。

此外,循環中的字符串檢查有點棘手。 單元格引用作為索引是對象 ,而不是字符串。 在比較直字符串之前,需要使用.toString()方法轉換單元格。

您的整個腳本應為:

  function addValidation() {

  // Get the spreadsheet and active sheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();

  // Get the data as an Array you can iterate and manipulate
  var data = sheet.getDataRange().getValues();  

  // Loop the sheet
  for(var i=0; i<data.length; i++) {

    // To change which columns you're testing, change the second value.
    // ColG = 6, not 11.
    // Convert data[i][6] using .toString() to compare the value
    if(data[i][6].toString() == "Complete") {

      // If it's "Complete," mark Col H as 'Shipped'
      sheet.getRange(i+1, 8).setValue("Shipped");

    } else {
      // If you want something else to happen, add that here.
    }
  }
}

最后一步是為腳本啟用觸發器。 如果將函數onEdit() ,它將自行運行,因為編輯是一個簡單的腳本。 由於它被稱為addValidation ,因此您需要在UI中手動添加onEdit觸發器。 轉到編輯>當前項目觸發器,然后單擊右下角的“添加觸發器”。 按照UI中的步驟操作,腳本應自行運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM