【问题标题】:How to replace text in Google Spreadsheet using App Scripts?如何使用应用脚本替换 Google 电子表格中的文本?
【发布时间】:2013-11-09 15:20:05
【问题描述】:

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

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

它让我找不到替换功能。 Google Apps 脚本中是否有任何函数可以让我替换字符串?

【问题讨论】:

  • Replace 是一个 JavaScript 字符串函数,单元格中的数据必须是字符串,否则您必须将其转换为字符串,进行替换并写回。如果您有许多单元格,请考虑使用批量读/写。

标签: google-apps-script google-sheets


【解决方案1】:

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

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

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

或者你可以乘以数字来去掉小数,但这取决于你有多少小数位:)

【讨论】:

    【解决方案2】:

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

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

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

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

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

    我尚未在大型数据集上对其进行测试,但我怀疑这会很快。


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

    【讨论】:

    • 我刚刚在一个相当大的数据集上对其进行了测试,并确认它比其他解决方案快得多。谢谢!
    【解决方案3】:

    由于某种原因,此解决方案对我不起作用。这是我的整个代码,应该用“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;
    

    【讨论】:

    • 嗨,1) getRange() 是 2d 数组,即使它的 1 列也是如此。 2)您需要在替换循环后设置值()。 for (var i = 0 ; i&lt;range.length ; i++) { range[i][0] = range[i][0].replace("+", ""); } ss.getRange("G5:G7").setValues(range ) 我认为这应该有助于 P.s 我知道它已经晚了,但是这个帖子在谷歌搜索中排名第一,所以可能会帮助其他人
    【解决方案4】:

    希望对你有帮助

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

    【讨论】:

      【解决方案5】:

      在此 Google 文档编辑器帮助论坛上分享 Bannager Bong 的一个非常有用的解决方案 thread. 对函数进行了轻微修改,以便它接受用于查找、替换值的参数,然后添加一个范围参数,以便函数可以针对特定区域。即便如此,这种方法非常慢(我的工作表有 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;}
          }
        }
      };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-27
        • 1970-01-01
        • 1970-01-01
        • 2020-05-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多