簡體   English   中英

谷歌工作表中的兩個活動工作表基於單元格比較更新錯誤

[英]two active sheets in google sheets update error based on cell comparison

我試圖讓這段代碼工作,但我知道我錯過了一些東西。 代碼應該做的是:使用另一個工作表引用從另一個單元格中查找特定文本,因此下面的谷歌工作表中有兩個工作表:'BSR DATA'和'ENTRY FORM'。 從 ENTRY FORM 開始,單元格 g6 會將其數據與 BSR DATA 的第一列進行比較,如果符合條件,它將使用“新值”更新數組/單元格引用的特定行。

鏈接到谷歌表: https://docs.google.com/spreadsheets/d/1kBuczydffPFBEfy2oegC1WsKXMjSxbGNRzWLCKurOMs/edit?usp=drivesdk

function UpdateBSRSpecial()
{
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var testForm = ss.getSheetByName("ENTRY FORM");
    var testTable = ss.getSheetByName("BSR DATA");
    var testFormValue = testForm.getRange("G6").getValue();
    var rangeData = testTable.getDataRange();
    var lastColumn = rangeData.getLastColumn();
    var lastRow = rangeData.getLastRow();
  for(var i=0;i>lastRow;i++){
     var dataID = testForm.getRange(i,1).getValue();
     if(testFormValue == dataID)
    {
        testTable.getRange(i,6).setValue("new value");
    };
  };
};

有一個代碼放錯了,請檢查下面的代碼:

   function UpdateBSRSpecial()
    {
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var testForm = ss.getSheetByName("ENTRY FORM");
        var testTable = ss.getSheetByName("BSR DATA");
        var testFormValue = testForm.getRange("G6").getValue();
        var rangeData = testTable.getDataRange();
        var lastColumn = rangeData.getLastColumn();
        var lastRow = rangeData.getLastRow();
       for(var i=2;i<=lastRow;i++){
           var dataID = testTable.getRange(i,1).getValue();
          if(testFormValue == dataID)
        {
            testTable.getRange(i,6).setValue("new value");
        };
      }; 
    }; 

希望這可以幫助

現有腳本正在更新所有行,因為它使用for(var i=0;i>lastRow;i++){循環。 以下腳本演示了搜索離散術語的過程。

我不打算處理“新價值”的更新,因為這在問題中並不清楚。

需要注意的方面

  • 該腳本獲取 BSR 上的所有數據 - var bsrdata = bsr.getRange(1,1,bsrLR,bstLC).getValues(); . 這可以在稍后更新值時使用。
  • 使用 Javascript map方法,將 A 列提取為單獨的數組進行搜索 - var bsrColA = bsrdata.map(function(e){return e[0];});//[[e],[e],[e]]=>[e,e,e]
  • 使用 Javascript indexOf方法進行搜索。 注意:如果找到匹配項,則該方法返回數組中搜索詞的索引號; 如果未找到匹配項,則該方法返回“-1”。
  • 腳本測試搜索是否成功: if (result !=-1){
  • indexOf返回一個從零開始的索引,因此實際的行號是索引加一: var row = result+1;

function so5866895401() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var formsheetname = "ENTRY FORM";
  var form = ss.getSheetByName(formsheetname);
  var bsrname = "BSR DATA";
  var bsr = ss.getSheetByName(bsrname);

  // get input cell on form
  var searchterm = form.getRange("G6").getValue();
  // Logger.log(searchterm);// DEBUG

  //get data from BSR
  var bsrLR = bsr.getLastRow();
  var bstLC = bsr.getLastColumn();
  var bsrdata = bsr.getRange(1,1,bsrLR,bstLC).getValues();

  // get column A of BSR
  var bsrColA = bsrdata.map(function(e){return e[0];});//[[e],[e],[e]]=>[e,e,e]
  // Logger.log(bsrColA);// DEBUG

  // search for the searchterm in ColumnA of BSR
  var result = bsrColA.indexOf(searchterm); // zero-based
  if (result !=-1){
    var row = result+1;
    Logger.log("result = "+result+", row = "+row);
  }
}

暫無
暫無

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

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