簡體   English   中英

如何在不影響谷歌應用腳本結果的情況下將 if 語句更改為 for 語句?

[英]How to change the if statement to for statement without affecting the outcome in google apps script?

在此處輸入圖像描述

你好,

每當提交或更新訂單時,我想將來自五個客戶的訂單復制到訂單歷史記錄表中。 這是我的代碼:

function onEdit(e){

  const dt = Utilities.formatDate(new Date(), 'Asia/Singapore', 'HH:mm:ss');
  var ss = SpreadsheetApp.getActiveSheet ();
  var direction = SpreadsheetApp.Direction
  var aLast = ss.getRange("I"+(ss.getLastRow()+1)).getNextDataCell(direction.UP).getRow()
  var destRange = ss.getRange(aLast+1,9);

  if (e.range.columnStart == 6 && e.range.rowStart >= 4) {
    if (e.value == 'Update' || e.value == 'Submit') {
      e.range.offset(0, 1).setValue(dt);
      
      if(e.range.rowStart = 4) {
        var order1 = ss.getRange ("A4:G4");
        order1.copyTo (destRange, {contentsOnly: true});
      } else if (e.range.rowStart = 5){
        var order2 = ss.getRange ("A5:G5");
        order2.copyTo (destRange, {contentsOnly: true});
      } else if (e.range.rowStart = 6){
        var order3 = ss.getRange ("A6:G6");
        order3.copyTo (destRange, {contentsOnly: true});
      } else if (e.range.rowStart = 7){
        var order4 = ss.getRange ("A7:G7");
        order4.copyTo (destRange, {contentsOnly: true});
      } else if (e.range.rowStart = 8){
        var order5 = ss.getRange ("A8:G8");
        order5.copyTo (destRange, {contentsOnly: true});
      }
      
      source.copyTo (destRange, {contentsOnly: true});
    } else {
      e.range.offset(0, 1).setValue('');
    }
  } 
}

但是,當我提交或更新來自Customer 2的訂單時,復制到 Order History 表中的訂單仍將是來自Customer 1的訂單。 我認為原因是因為這行代碼: if (e.range.columnStart == 6 && e.range.rowStart >= 4)其中>=4是主要問題。 但是,我不確定如何將if statement更改為for loop ,因為當column F顯示UpdateSubmit時,這行代碼用於幫助在column G中打印當前時間戳。

希望得到專家的指導,真的很感激任何幫助!

修改點:

  • 在您的腳本中,我認為需要修改每個 if 語句。
    • 例如,在if(e.range.rowStart = 4) {的情況下,將4分配給e.range.rowStart 在您的腳本中,輸入了從 4 到 8 的數字。 在這些情況下,if 語句始終為true 這樣,第一個 if 語句的腳本將始終運行。 我認為這是您的問題的原因。
  • 並且,關於source.copyTo (destRange, {contentsOnly: true}); ,在您的腳本中, souece聲明源。 所以我認為這一行發生了錯誤。

當以上幾點反映到您的腳本時,它變成如下。

修改后的腳本:

function onEdit(e){
  const dt = Utilities.formatDate(new Date(), 'Asia/Singapore', 'HH:mm:ss');
  var ss = SpreadsheetApp.getActiveSheet ();
  var direction = SpreadsheetApp.Direction
  var aLast = ss.getRange("I"+(ss.getLastRow()+1)).getNextDataCell(direction.UP).getRow()
  var destRange = ss.getRange(aLast+1,9);

  if (e.range.columnStart == 6 && e.range.rowStart >= 4) {
    if (e.value == 'Update' || e.value == 'Submit') {
      e.range.offset(0, 1).setValue(dt);
      
      if(e.range.rowStart == 4) {  // Modified
        var order1 = ss.getRange ("A4:G4");
        order1.copyTo (destRange, {contentsOnly: true});
      } else if (e.range.rowStart == 5){  // Modified
        var order2 = ss.getRange ("A5:G5");
        order2.copyTo (destRange, {contentsOnly: true});
      } else if (e.range.rowStart == 6){  // Modified
        var order3 = ss.getRange ("A6:G6");
        order3.copyTo (destRange, {contentsOnly: true});
      } else if (e.range.rowStart == 7){  // Modified
        var order4 = ss.getRange ("A7:G7");
        order4.copyTo (destRange, {contentsOnly: true});
      } else if (e.range.rowStart == 8){  // Modified
        var order5 = ss.getRange ("A8:G8");
        order5.copyTo (destRange, {contentsOnly: true});
      }
      
      // source.copyTo (destRange, {contentsOnly: true});    // Modified. I thought that this line mignt be able to be removed.
    } else {
      e.range.offset(0, 1).setValue('');
    }
  } 
}

參考:

暫無
暫無

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

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