脚本读取数据但不更改它
Script reads data but not changing it
我的代码似乎可以正常工作,但显然我错过了一个技巧。
function booleanToNumerics(){
var ss = SpreadsheetApp.openById("1--wLf-_CcfsF_7mn4SaAyqgw_G6Jvkymp7qw8DgjhOU");
var shCS = ss.getSheetByName("CS-CLEAN");
var lastRow = shCS.getLastRow();
var lastCol = shCS.getLastColumn();
var shData = shCS.getRange(2,3,lastRow,lastCol).getValues();
var changeData = shData.toString().replace("FALSE", "X");
Logger.log(changeData)
return changeData;
shCS.getRange(2,3,lastRow,lastCol).setValues(changeData);
}
当我查看日志时,它正在读取 sheet 但是当我要求它写入数据时它没有做任何明显的事情(即我想要的)。任何人都可以指出答案或资源来解释我失败的原因吗?
因此,您检索了所有值并希望将具有 "FALSE"
值的每个字段替换为 "X"
值。
使用 .getValues()
检索二维数组,例如
[[1,2,"FALSE"],["4","5","FALSE"]]
当然,这取决于 sheet 中的列数和行数。
然后你用.toString()
把它转换成字符串就变成了
"1,2,FALSE,4,5,FALSE"
然后,使用.replace()
方法,你会得到类似
的东西
"1,2,X,4,5,FALSE"
这里发生了三件事
1/ 一旦调用toString
,数组的每个属性都会丢失。
要解决这个问题,您需要实际调用数组 JSON.stringify
2/ 您没有替换 ALL 个 FALSE
,只是第一个
要解决这个问题,你需要使用一些正则表达式,就像这样
str = str.replace(/abc/g, '');
之后,你需要将你的字符串转换成一个有效的数组,用JSON.parse
方法实现
3/ 您 return
在 设置值之前。这会导致函数在您不想的时候终止。
解决所有这些问题会给你这个,它应该可以正常工作:
function booleanToNumerics(){
var ss = SpreadsheetApp.openById("1xRKM7BlAgwYWuLdCqMOd5qwmiy4i1d8bXxZWU7rJfE4");
var shCS = ss.getSheetByName("CS-CLEAN");
var lastRow = shCS.getLastRow();
var lastCol = shCS.getLastColumn();
var shData = shCS.getRange(2,3,lastRow,lastCol).getValues();
var regexToUse = /false/g, valToReplaceWith = new String("X");
var changeData = JSON.stringify(shData).replace(regexToUse, '"'+valToReplaceWith+'"');
Logger.log(changeData)
shCS.getRange(2,3,lastRow,lastCol).setValues(JSON.parse(changeData));
return changeData;
}
我的代码似乎可以正常工作,但显然我错过了一个技巧。
function booleanToNumerics(){
var ss = SpreadsheetApp.openById("1--wLf-_CcfsF_7mn4SaAyqgw_G6Jvkymp7qw8DgjhOU");
var shCS = ss.getSheetByName("CS-CLEAN");
var lastRow = shCS.getLastRow();
var lastCol = shCS.getLastColumn();
var shData = shCS.getRange(2,3,lastRow,lastCol).getValues();
var changeData = shData.toString().replace("FALSE", "X");
Logger.log(changeData)
return changeData;
shCS.getRange(2,3,lastRow,lastCol).setValues(changeData);
}
当我查看日志时,它正在读取 sheet 但是当我要求它写入数据时它没有做任何明显的事情(即我想要的)。任何人都可以指出答案或资源来解释我失败的原因吗?
因此,您检索了所有值并希望将具有 "FALSE"
值的每个字段替换为 "X"
值。
使用 .getValues()
检索二维数组,例如
[[1,2,"FALSE"],["4","5","FALSE"]]
当然,这取决于 sheet 中的列数和行数。
然后你用.toString()
把它转换成字符串就变成了
"1,2,FALSE,4,5,FALSE"
然后,使用.replace()
方法,你会得到类似
"1,2,X,4,5,FALSE"
这里发生了三件事
1/ 一旦调用toString
,数组的每个属性都会丢失。
要解决这个问题,您需要实际调用数组 JSON.stringify
2/ 您没有替换 ALL 个 FALSE
,只是第一个
要解决这个问题,你需要使用一些正则表达式,就像这样
str = str.replace(/abc/g, '');
之后,你需要将你的字符串转换成一个有效的数组,用JSON.parse
方法实现
3/ 您 return
在 设置值之前。这会导致函数在您不想的时候终止。
解决所有这些问题会给你这个,它应该可以正常工作:
function booleanToNumerics(){
var ss = SpreadsheetApp.openById("1xRKM7BlAgwYWuLdCqMOd5qwmiy4i1d8bXxZWU7rJfE4");
var shCS = ss.getSheetByName("CS-CLEAN");
var lastRow = shCS.getLastRow();
var lastCol = shCS.getLastColumn();
var shData = shCS.getRange(2,3,lastRow,lastCol).getValues();
var regexToUse = /false/g, valToReplaceWith = new String("X");
var changeData = JSON.stringify(shData).replace(regexToUse, '"'+valToReplaceWith+'"');
Logger.log(changeData)
shCS.getRange(2,3,lastRow,lastCol).setValues(JSON.parse(changeData));
return changeData;
}