问: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('#');
它将在范围内每个单元格的开头用一个 #
更改数字前任意数量的任何非数字字符。
我正在寻找 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('#');
它将在范围内每个单元格的开头用一个 #
更改数字前任意数量的任何非数字字符。