脚本读取数据但不更改数据

时间:2016-02-10 09:37:50

标签: google-apps-script range overwrite

我的代码似乎正在运作,但显然我错过了一个技巧。

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

}

当我查看日志时,它正在阅读表单,但当我要求它写入数据时,它并没有做任何明显的事情(即我想要的)。任何人都能指出我的答案或资源来解释我失败的原因吗?

1 个答案:

答案 0 :(得分:1)

因此,您检索所有值,并希望将"FALSE"值替换为"X"值的每个字段。

使用.getValues()检索二维数组,例如

[[1,2,"FALSE"],["4","5","FALSE"]]

当然,取决于工作表中的列数和行数。

然后将其转换为.toString()的字符串,它变为

"1,2,FALSE,4,5,FALSE"

然后,使用.replace()方法,您可以获得类似

的内容
"1,2,X,4,5,FALSE"

这里发生了三件事

1 /调用toString后,数组的每个属性都会丢失。

要解决此问题,您需要在数组上实际调用JSON.stringify

2 /您没有替换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;
}