[英]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.