我正在尝试创建一个函数来查找并替换我的 Google 表格中的所有撇号。
这是函数:
function VymazApostrofu(){
var sh = SpreadsheetApp.getActiveSpreadsheet();
var ss = sh.getActiveSheet();
var f = "\'";
var r = "";
var data = ss.getDataRange().getValues();
Logger.log(data.length);
for (var i = 0; i < data[0].length;i++){
for (var j = 0; j < data.length;j++){
if(data[j][i]==f)
ss.getRange(j+1,i+1).setValue(r);
}
}
}
问题是,我找不到方法,如何将撇号设置为变量 f。你能帮我一下吗?
我尝试过双引号、转义标记为 ,但没有任何效果。
最佳答案
我相信您的目标如下。
- 您希望使用 Google Apps 脚本将单引号
'
替换为 ``(空)。
修改点:
- 在您的脚本中,
setValue
在循环中使用。在这种情况下,我担心流程成本会变高。 - 在
data[j][i] == f
的情况下,当单元格值只有'
时,就变为true。从I has attemptsed double quote, escape mark as , but Nothing is work.
,我认为这可能是您当前问题的原因,而且,从您的情况来看,在您的实际情况中,我猜测单引号可能包含在单元格的文本中。
当这些点反射(reflect)在修改后的脚本中时,下面的修改如何?
修改后的脚本1:
在此示例脚本中,事件工作表中的所有单引号均被删除。
function VymazApostrofu() {
var sh = SpreadsheetApp.getActiveSpreadsheet();
var ss = sh.getActiveSheet();
var f = "'";
var r = "";
var range = ss.getDataRange();
range.createTextFinder(f).replaceAllWith(r);
range.setValues(range.getValues());
}
运行此脚本时,使用 TextFinder 和
setValues
将单元格值的'
替换为空。 ('
被删除。)我认为,当在您的情况下使用 TextFinder 和setValues
时,过程成本可以减少一点。重要的是,如果将单引号添加到单元格值的第一个字符,则用于将单元格值用作字符串。例如,
001
放入单元格中,它就变成1
。但是,'001
放入单元格中,它就变成了文本的001
,而当您选择单元格时,您可以看到'001
。关于这一点,这个线程可能有用。 Ref- 如果您只想删除单元格值顶部字符的单引号,请测试以下模式 2。
修改后的脚本2:
在此示例脚本中,单元格值顶部字符的单引号被删除。
function VymazApostrofu2() {
var sh = SpreadsheetApp.getActiveSpreadsheet();
var ss = sh.getActiveSheet();
var range = ss.getDataRange();
var f = "'";
var r = "";
range.createTextFinder(`^${f}{1,}`).useRegularExpression(true).replaceAllWith(r);
range.setValues(range.getValues());
}
引用文献:
关于google-apps-script - 将撇号设置为 Google 表中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75698113/