首页 > 解决方案 > 问:谷歌表格脚本改变列,所以在数字前面添加一个主题标签

问题描述

我正在寻找帮助/脚本,它在几个列(例如:A10:D200)中替换/附加一个数字(1-999)和一个额外的标签(#1 - #999)。

之前的例子:

一个 C D
123 456 31 5
6 888 123 9
92 55 3 791
11 2 456 712

它应该看起来如何:

一个 C D
#123 #456 #31 #5
#6 第888章 #123 #9
#92 #55 #3 #791
#11 #2 #456 #712

等等

function onEdit() {
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Stewarding - Imola Q")
      var lastRow = sheet.getLastRow()
      var lastColumn = sheet.getLastColumn()
      var range = sheet.getRange(10, 1, lastRow, 4)
      var to_replace = [0-9];
      var replace_with = "#";
      var data  = range.getValues();
    
        var oldValue="";
        var newValue="";
        var cellsChanged = 0;
    
        for (var r=0; r<data.length; r++) {
          for (var i=0; i<data[r].length; i++) {
            oldValue = data[r][i];
            newValue = data[r][i].replace(to_replace, replace_with +oldValue);
            if (oldValue!=newValue)
            {
              cellsChanged++;
              data[r][i] = newValue;
            }
          }
        }
        range.setValues(data);
        //Logger.log(data);
    }

提前感谢您的帮助

标签: javascriptgoogle-apps-scriptgoogle-sheetsgoogle-apps

解决方案


或者,它可以这样做:

function myFunction() {
  const sheet = SpreadsheetApp.getActiveSheet(); // your sheet
  const range = sheet.getRange('A10:D200'); // your range

  // find all digits and put # before
  range.createTextFinder('(\\d+)').useRegularExpression(true).replaceAllWith('#$1');
}

为了防止##重新运行 scipt 后出现双倍,最后一行可能是这样的:

range.createTextFinder('^\\D*(\\d+)').useRegularExpression(true).replaceAllWith('#$1');

它将#在范围的每个单元格的开头更改数字之前的任意数量的任何非数字字符。


推荐阅读