如何使用App Scripts替换Google电子表格中的文字?

时间:2013-11-09 15:20:06

标签: google-apps-script

我试图获取范围的值,然后从单元格中删除所有点。

var FILE = SpreadsheetApp.openById("xyz");
var CONTENT = FILE.getSheetByName("Sheet1");
var A1 = CONTENT.getRange("I17").getValue();
A1. replace(".", "");

它让我无法找到替换功能。 Google Apps脚本中是否有允许我替换字符串的功能?

5 个答案:

答案 0 :(得分:16)

如果这是您的脚本的完全副本,那么您在A1.replace之间有一个空格,但我认为不是。{}

@SergeInsas是正确的,内容需要是replace()函数的字符串才能工作,因此如果您尝试用十进制数替换.,那么您可以使用{{1}方法首先如下所示。

toString()

或者您可以将数字乘以除去小数,但这取决于您有多少小数位:)

答案 1 :(得分:4)

有一个更强大、更简单的方法可用:TextFinder

这个问题的公认答案需要一个额外的步骤来将替换的字符串发布回单元格。

TextFinder 方法不需要您将数据写回单元格。

如果你想搜索多个单元格,那么这个方法可以节省你的迭代次数。

  var FILE = SpreadsheetApp.openById("xyz");
  var CONTENT = FILE.getSheetByName("Sheet1");
  var A1 = CONTENT.getRange("I17");
  A1.createTextFinder(".").replaceAllWith("");

我还没有在大型数据集上测试过,但我怀疑这会很快。


编辑:我写了一个short tutorial on this

答案 2 :(得分:1)

由于某种原因,该解决方案对我不起作用。这是我的整个代码,应该用“ nothing”代替“ +”符号

  // I need to replace more occurrences of different strings, so this is just an example..
  var ui = SpreadsheetApp.getUi();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var range = ss.getRange("G5:G7").getValues();

  // this is a loop, to go through multiple cells that may contain the text, that needs to be replaced.
    for (var i = 0 ; i<range.length ; i++) {
        var le = range.length;
        var stri = range[i].toString().replace("+", "");
        Logger.log(stri);
  }  

  var msg = ui.alert("Replaced?");
  return msg;

答案 3 :(得分:0)

Bannager Bong的Google文档编辑器帮助论坛@T.J.Crowder上分享了一个非常有用的解决方案,对该函数进行了少许修改,使其可以接受用于查找的参数,替换值,然后添加范围参数以便该功能可以定位到特定区域。即使这样,这种方法也非常慢(我的工作表有5k行)。

function Cleanup12m() {
  var spreadsheet = SpreadsheetApp.getActive();
  //fandr(",", "");
  //fandr("\"","");
  fandr("�","",spreadsheet.getRange('BA:BA')); //uses specific range
};

function fandr(find, repl) {
  var r=SpreadsheetApp.getActiveSheet().getDataRange();
  var rws=r.getNumRows();
  var cls=r.getNumColumns();
  var i,j,a,find,repl;
  //find="abc";
  //repl="xyz";

  for (i=1;i<=rws;i++) {
    for (j=1;j<=cls;j++) {
      a=r.getCell(i, j).getValue();
      if (r.getCell(i,j).getFormula()) {continue;}
      //if (a==find) { r.getCell(i, j).setValue(repl);}
      try {
        a=a.replace(find,repl);
        r.getCell(i, j).setValue(a);
      }
      catch (err) {continue;}
    }
  }
};

//Revised to apply to a selected range
function fandr(find, repl, range) {
  var r= range;//SpreadsheetApp.getActiveSheet().getDataRange();
  var rws=r.getNumRows();
  var cls=r.getNumColumns();
  var i,j,a,find,repl;
  //find="abc";
  //repl="xyz";

  for (i=1;i<=rws;i++) {
    for (j=1;j<=cls;j++) {
      a=r.getCell(i, j).getValue();
      if (r.getCell(i,j).getFormula()) {continue;}
      //if (a==find) { r.getCell(i, j).setValue(repl);}
      try {
        a=a.replace(find,repl);
        r.getCell(i, j).setValue(a);
      }
      catch (err) {continue;}
    }
  }
};

答案 4 :(得分:0)

希望对您有帮助

function removeAccents() {
  var spreadsheet = SpreadsheetApp.getActive();
  var range = spreadsheet.getRange("F3:F");
  var data  = range.getValues();

  for (var row = 0; row < data.length; row++) {
    for (var col = 0; col < data[row].length; col++) {
      data[row][col] = (data[row][col]).toString().replace(/é/g, 'e');
      data[row][col] = (data[row][col]).toString().replace(/ã/g, 'a');
    }
  }
  range.setValues(data);
};
相关问题