替换 Google 电子表格中字符串中的多次出现
Replace multiple occurrences in String on Google Spreadsheet
所以我制作了一个电子表格,用于记录某些 python 文件中的函数描述。 TLDR 由于文件遗留的混乱,这些描述很难阅读。
所以我解决这个问题的方法是:
function onEdit(e) {
const desFix = ['"', '
'];
let activeSheet = e.source.getActiveSheet();
let range = e.range;
const desc = range.getValue();
const rdesc = desc.toString();
for (let i=0; i<desFix.length; i++){
const rep = rdesc.replace(desFix[i]," ");
range.setValue(rep);
}
}
但是当我需要它多次发生时,它只在第一次出现时起作用。我发现并尝试 implement/translate 到电子表格 api 的所有内容都中断了。知道我需要做些什么才能多次 运行 吗?
我相信你的目标如下。
- 您想将
"
和 

的值转换为 Google Spreadsheet.[=56 中活动范围内的 " "
=]
- 您想 运行 使用 OnEdit 触发器的脚本。
修改点:
- 在您的脚本中,for 循环中的
rdesc.replace(desFix[i]," ")
使用了相同的 rdesc
。这样,只有第 2 个循环的第 1 个 

被替换。我认为这就是您遇到问题的原因。
- 而且,我觉得
setValue
用在for循环中,处理成本会很高
- 对于你的情况,我认为 TextFinder 可能是合适的。
所以在这个答案中,我想建议使用 TextFinder 修改您的脚本。当您使用 TextFinder 修改您的脚本时,它变成如下。
修改后的脚本:
function onEdit(e) {
const desFix = ['"', '
'];
desFix.forEach(f => e.range.createTextFinder(f).matchCase(true).replaceAllWith(" "));
}
- 例如,当您使用它时,请编辑一个单元格。这样,脚本被 OnEdit 触发器 运行 单元格中值中的
"
和 

替换为 " "
.
注:
当你想用脚本编辑器运行脚本时,你也可以使用下面的脚本。当您使用以下脚本时,请在脚本编辑器中运行 myFunction()
。这样,检查活动 sheet 中的所有单元格值。
function myFunction() {
const desFix = ['"', '
'];
const sheet = SpreadsheetApp.getActiveSheet();
desFix.forEach(f => sheet.createTextFinder(f).matchCase(true).replaceAllWith(" "));
}
参考文献:
- Class TextFinder
google-apps-scropt
- 我认为这些链接可能会有用。
所以我制作了一个电子表格,用于记录某些 python 文件中的函数描述。 TLDR 由于文件遗留的混乱,这些描述很难阅读。
所以我解决这个问题的方法是:
function onEdit(e) {
const desFix = ['"', '
'];
let activeSheet = e.source.getActiveSheet();
let range = e.range;
const desc = range.getValue();
const rdesc = desc.toString();
for (let i=0; i<desFix.length; i++){
const rep = rdesc.replace(desFix[i]," ");
range.setValue(rep);
}
}
但是当我需要它多次发生时,它只在第一次出现时起作用。我发现并尝试 implement/translate 到电子表格 api 的所有内容都中断了。知道我需要做些什么才能多次 运行 吗?
我相信你的目标如下。
- 您想将
"
和

的值转换为 Google Spreadsheet.[=56 中活动范围内的" "
=] - 您想 运行 使用 OnEdit 触发器的脚本。
修改点:
- 在您的脚本中,for 循环中的
rdesc.replace(desFix[i]," ")
使用了相同的rdesc
。这样,只有第 2 个循环的第 1 个

被替换。我认为这就是您遇到问题的原因。 - 而且,我觉得
setValue
用在for循环中,处理成本会很高 - 对于你的情况,我认为 TextFinder 可能是合适的。
所以在这个答案中,我想建议使用 TextFinder 修改您的脚本。当您使用 TextFinder 修改您的脚本时,它变成如下。
修改后的脚本:
function onEdit(e) {
const desFix = ['"', '
'];
desFix.forEach(f => e.range.createTextFinder(f).matchCase(true).replaceAllWith(" "));
}
- 例如,当您使用它时,请编辑一个单元格。这样,脚本被 OnEdit 触发器 运行 单元格中值中的
"
和

替换为" "
.
注:
当你想用脚本编辑器运行脚本时,你也可以使用下面的脚本。当您使用以下脚本时,请在脚本编辑器中运行
myFunction()
。这样,检查活动 sheet 中的所有单元格值。function myFunction() { const desFix = ['"', '
']; const sheet = SpreadsheetApp.getActiveSheet(); desFix.forEach(f => sheet.createTextFinder(f).matchCase(true).replaceAllWith(" ")); }
参考文献:
- Class TextFinder
google-apps-scropt
- 我认为这些链接可能会有用。