繁体   English   中英

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

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

这是Google Sheet,可以复制: https://docs.google.com/spreadsheets/d/1ffIRGiGkiy5WFzSAvWNOY_3cqNXgTAOtO6o8vxS-BFU/edit?usp=sharing

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); }

由于上面提供的脚本包含var isAdded = recruitment_log.getRange('R3').getValue(); R3的值当前设置为“是”,这就是下面脚本的条件未运行的原因。

if(isAdded == "No") {
    var recruit_id = "'" + recruitment_log.getRange('J3').getValue();
    main_roster.getRange('I100').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');
  
  //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)

}

我对您的isAdded变量进行了以下修改,以获取 RL1 工作表上的整个数据范围。

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

这部分脚本仅用于获取 New Operatives 的当前数据长度。 使用.filter()方法过滤掉空数组元素,因为如果在电子表格上应用了格式, getValues()会得到空白单元格。

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

使用 ES6 .map()方法为尚未添加到主名册表文件的数据创建一个新数组。

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

截屏:

在此处输入图像描述

参考:

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