我需要清除Google表格中的数据。特别是其中一列可能包含太多字符,并且我希望仅在其201+长的情况下才使用前200个字符。
我找到了一种方法来做,但是它是如此讨厌,以至于我可以目测看到细胞被1比1校正。我要处理10万条以上的线路,因此我的解决方案实际上不是一个选择。
这是目前的代码,无法正常工作。我正在研究
range.Value = LEFT(range.Value,200);
行
function myFunction() {
var maxRow = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getLastRow();
removeOverLenght(4, maxRow); //COLUMN D index = 4
}
function removeOverLenght(column, maxRow){
var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var rangeArray = [];
rangeArray = activeSheet.getRange(1,column,maxRow,1).getValues();
for(var i=0;i<rangeArray.length;i++){
rangeArray[i] = rangeArray[i].toString().substr(0, 200);
}
activeSheet.getRange(1,column,maxRow,1).setValues([rangeArray]); // I get an error saying that the length is 1 but should be 74 (maxRow value)
//activeSheet.getRange(1,column,1,maxRow).setValues([rangeArray]); //This code runs without error, but the values are pasted on the same row, on 74 different columns, flipping from vertical to horizontal which is nonsense
}
我已经搜索并阅读了大量文章,但是由于某些原因,我什至无法访问它们,所以子字符串功能也无法正常工作。另外,如果有一种无需执行for()
函数即可立即处理所有单元格的方法,则非常欢迎任何潜在客户。
编辑:我添加了建议的解决方案,它适用于子字符串。但是,当尝试将其作为数组进行操作时,即使getValue
是for()
的一部分,结果也是所有单元格都具有相同的值(来自D1)。知道我做错了什么吗?我尝试将代码基于best practices,但是我真的不知道他们在做什么不同
EDIT2:我可以通过在for()循环之外使用getValues(),处理循环中的值并使用setValues([Array])
来进一步获取代码。唯一的问题是,它不允许我将值设置在相同的范围内,因此我需要将getRange(1,column,maxRow,1)
切换为getRange(1,column,1,maxRow)
,这是毫无意义的,因为它会将列翻转为一行。任何想法?我已经阅读了大约4个小时的有关数组的内容,并且可用的文档太可怕了
答案 0 :(得分:0)
我不确定为什么子字符串功能对您不起作用。我在想这可能是因为您正在读取的值没有被解释为字符串。
尝试一下:
function removeOverLenght(column, maxRow){
var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
for(var i=1;i<maxRow+1;i++){
var range = activeSheet.getRange(i,column),
// ensure you're working with a string
value = "" + range.getValue();
range.setValue(value.substr(0, 200));
}
}