问:Google Sheet 更改列的脚本,以便在数字前面添加一个主题标签

Q: Google Sheet Script to alter columns so in front of numbers its adding an hashtag

我正在寻找 help/script,其中 replace/append 几个列中的数字 (1-999)(例如:A10:D200)和一个附加标签 (#1 - #999) .

之前的例子:

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

它应该是什么样子:

一个 B 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);
    }

提前感谢您的帮助

newValue = '#' + String(data[r][i]); 不行吗?

如果您在某些情况下不需要 '#' 只需添加一个 if 语句

或者也可以这样做:

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('#');
}

为了防止在重新运行 scipt 后重复 ##,最后一行可能是这样的:

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

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