尝试在GoogleScript中重现Excel“ LEFT()”函数

时间:2018-10-15 21:41:19

标签: javascript google-apps-script google-sheets

我需要清除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()函数即可立即处理所有单元格的方法,则非常欢迎任何潜在客户。

编辑:我添加了建议的解决方案,它适用于子字符串。但是,当尝试将其作为数组进行操作时,即使getValuefor()的一部分,结果也是所有单元格都具有相同的值(来自D1)。知道我做错了什么吗?我尝试将代码基于best practices,但是我真的不知道他们在做什么不同

EDIT2:我可以通过在for()循环之外使用getValues(),处理循环中的值并使用setValues([Array])来进一步获取代码。唯一的问题是,它不允许我将值设置在相同的范围内,因此我需要将getRange(1,column,maxRow,1)切换为getRange(1,column,1,maxRow),这是毫无意义的,因为它会将列翻转为一行。任何想法?我已经阅读了大约4个小时的有关数组的内容,并且可用的文档太可怕了

1 个答案:

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