简体   繁体   English

GAS Function 未按照表中的预期设置值

[英]GAS Function not setting value as intended in sheet

This is the Google Sheet, it can be copied: https://docs.google.com/spreadsheets/d/1ffIRGiGkiy5WFzSAvWNOY_3cqNXgTAOtO6o8vxS-BFU/edit?usp=sharing这是Google Sheet,可以复制: https://docs.google.com/spreadsheets/d/1ffIRGiGkiy5WFzSAvWNOY_3cqNXgTAOtO6o8vxS-BFU/edit?usp=sharing

The Function 'AddNewMembers' does not function, even if "isAdded == "No" it will not setValue(recruit_id) Function 'AddNewMembers' 没有 function,即使 "isAdded == "No" 也不会 setValue(recruit_id)

 function AddNewMembers(event){ event = {range: SpreadsheetApp.getActiveRange()} CheckHandleSteamIDNotation(event) SpreadsheetApp.flush(); var ss = SpreadsheetApp.getActiveSpreadsheet(); var recruitment_log = ss.getSheetByName('RL1'); var main_roster = ss.getSheetByName('Main Roster'); var isAdded = recruitment_log.getRange('R3').getValue(); if(isAdded == "No") { var recruit_id = "'" + recruitment_log.getRange('J3').getValue(); main_roster.getRange('I100').setValue(recruit_id); } } function CheckHandleSteamIDNotation(event) { let formSheet = SpreadsheetApp.getActiveSheet(); let header = formSheet.getRange(1,1,1,formSheet.getMaxColumns()).getValues(); let formRange = formSheet.getRange(formSheet.getLastRow(), 1, 1, formSheet.getMaxColumns()); let formValues = formRange.getValues(); for(let i = 0; i < header[0].length; i++) { if(header[0][i].includes("SteamID")) { formValues[0][i] = "'" + formValues[0][i]; } } formRange.setValues(formValues); }

Since the provided script above contains var isAdded = recruitment_log.getRange('R3').getValue();由于上面提供的脚本包含var isAdded = recruitment_log.getRange('R3').getValue(); the value of R3 is currently set to "Yes" that is why the condition for the script below is not running. R3的值当前设置为“是”,这就是下面脚本的条件未运行的原因。

if(isAdded == "No") {
    var recruit_id = "'" + recruitment_log.getRange('J3').getValue();
    main_roster.getRange('I100').setValue(recruit_id);
  }

Try this modification:试试这个修改:

function AddNewMembers(event) {
  event = { range: SpreadsheetApp.getActiveRange() }
  CheckHandleSteamIDNotation(event)
  SpreadsheetApp.flush();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var recruitment_log = ss.getSheetByName('RL1');
  var main_roster = ss.getSheetByName('Main Roster');
  
  //Gets all the data values on recruitment_log
  var isAdded = recruitment_log.getRange(3, 1, recruitment_log.getLastRow(), recruitment_log.getLastColumn()).getValues();
  //Gets the last row starting I17
  var lastrow = main_roster.getRange(17, 9, main_roster.getLastRow() , 1).getValues().filter((x => x > 1)).length
  //Sets the value on the last blank row
  isAdded.map(x => x[17].toString().toLocaleLowerCase() == "no" ? "'" + main_roster.getRange(17 + lastrow,9).setValue(x[9]) : x)

}

I made modifications on your isAdded variable to the following to get the entire range of data on RL1 sheet.我对您的isAdded变量进行了以下修改,以获取 RL1 工作表上的整个数据范围。

var isAdded = recruitment_log.getRange(3, 1, recruitment_log.getLastRow(), recruitment_log.getLastColumn()).getValues();

This part of script was only used to get the current length of data for the New Operatives.这部分脚本仅用于获取 New Operatives 的当前数据长度。 Using .filter() method to filter out empty array elements, since getValues() gets blank cells if there is formatting applied on the spreadsheet.使用.filter()方法过滤掉空数组元素,因为如果在电子表格上应用了格式, getValues()会得到空白单元格。

var lastrow = main_roster.getRange(17, 9, main_roster.getLastRow() , 1).getValues().filter((x => x > 1)).length

Using ES6 .map() method to create a new array for the data that hasn't been added to the main roster sheet file.使用 ES6 .map()方法为尚未添加到主名册表文件的数据创建一个新数组。

isAdded.map(x => x[17].toString().toLocaleLowerCase() == "no" ? "'" + main_roster.getRange(17 + lastrow,9).setValue(x[9]) : x)

Screenshot:截屏:

在此处输入图像描述

Reference:参考:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter#description https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects /数组/过滤器#description

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM