Google apps script 用数组中的随机值替换字符串中的每个匹配项
我在单元格C2中有一个长字符串,字符串长度上有多次匹配(#)-我想从数组对象“rand”为每个匹配指定一个值。然后将我的新字符串重写回单元格C2 我的示例字符串可以是“这是一个字符串,这也是一个字符串,但这也是一个字符串” 我想从我的rand数组中向“#”的每个实例添加一个随机值Google apps script 用数组中的随机值替换字符串中的每个匹配项,google-apps-script,Google Apps Script,我在单元格C2中有一个长字符串,字符串长度上有多次匹配(#)-我想从数组对象“rand”为每个匹配指定一个值。然后将我的新字符串重写回单元格C2 我的示例字符串可以是“这是一个字符串,这也是一个字符串,但这也是一个字符串” 我想从我的rand数组中向“#”的每个实例添加一个随机值 函数mergeAll(){ var doc=SpreadsheetApp.openById(脚本_PROP.getProperty(“1ixxxyl3ure1xfgbz76mefaxlnxegydzxomf6wq5yq
函数mergeAll(){
var doc=SpreadsheetApp.openById(脚本_PROP.getProperty(“1ixxxyl3ure1xfgbz76mefaxlnxegydzxomf6wq5yqs”);
var sheet1=文件getSheetByName(“tabla de porcentajes”);
var sheet2=文件getSheetByName(“预输出”);
var sheet3=doc.getSheetByName(“输出”);
var range=sheet2.getDataRange();
var data=sheet2.getDataRange().getValues();
对于(var i=0;i而言,您似乎过度考虑了这个问题,希望这个解决方案和解释会有所帮助
在实现中编写的循环有一些问题。在第一个循环中,每次迭代都要声明变量,因此aditivo()
的最终值是上次迭代中设置的值。另一个循环是无限的,因为每次迭代都使用aditivo[counter++]递增计数器变量
,因此j
始终小于计数器
此外,字符串替换未按预期工作。您正在使用数组aditivo()
的内容替换每次出现的“#”。在当前代码中aditivo()
只有1个值,但如果aditivo()
有更多成员,则替换将把所有成员放在每个子字符串之间
最终,您实际上不需要任何循环来完成所需的操作:您所要做的就是使用函数在连接的字符串上运行全局替换以返回随机替换字符串,而不是使用固定替换。下面是一个快速实现,我希望这能满足您的需要--您可以编写一个更好的:
function mergeAll() {
var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("<obfucscated>"));
var sheet1 = doc.getSheetByName("tabla de porcentajes");
var sheet2 = doc.getSheetByName("preoutput");
var sheet3 = doc.getSheetByName("output") ;
var data = sheet2.getDataRange().getValues();
var str = data.join("#"); // join your data array into one string
// make rand[] into a 1-dimensional array so that we can address the elements more easily
var rand = [" así como "," también "," asimismo "," igualmente "," asimismo "," de igual modo "," de igual manera "," de igual forma "," del mismo modo "," por su parte "," de la misma manera "," de la misma forma "," por otro lado "];
// now do the global replace on str,
// but use a function to give us a random replacement string
str = str.replace(/#/g, function(m){ return rand[Math.floor(Math.random()*rand.length)]; });
// now write the updated str back to the spreadsheet
sheet3.getRange("C2").setValue(str);
}
函数mergeAll(){
var doc=SpreadsheetApp.openById(SCRIPT_PROP.getProperty(“”);
var sheet1=文件getSheetByName(“tabla de porcentajes”);
var sheet2=文件getSheetByName(“预输出”);
var sheet3=doc.getSheetByName(“输出”);
var data=sheet2.getDataRange().getValues();
var str=data.join(“#”);//将数据数组合并为一个字符串
//将rand[]设置为一维数组,以便更轻松地处理元素
变量rand=[“asícomo”、“también”、“asimismo”、“igualmente”、“asimismo”、“de igual modo”、“de igual manera”、“de igual forma”、“del mismo modo”、“por su parte”、“de la mism manera”、“de la mism forma”、“por otro lado”];
//现在在str上进行全局替换,
//但是使用一个函数给我们一个随机替换字符串
str=str.replace(/#/g,函数(m){返回rand[Math.floor(Math.random()*rand.length)];});
//现在将更新后的str写回电子表格
表3.getRange(“C2”).setValue(str);
}
这是一个不完整的示例。术语数据未定义。我认为将代码缩短到相关部分会有所帮助,因此我现在包含了整个代码。我也更新了描述。这太好了,因为您将解决方案简化为几行。非常优雅。感谢您的课程。我选择了您的答案作为参考最好的和正确的一个!
function mergeAll() {
var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("<obfucscated>"));
var sheet1 = doc.getSheetByName("tabla de porcentajes");
var sheet2 = doc.getSheetByName("preoutput");
var sheet3 = doc.getSheetByName("output") ;
var data = sheet2.getDataRange().getValues();
var str = data.join("#"); // join your data array into one string
// make rand[] into a 1-dimensional array so that we can address the elements more easily
var rand = [" así como "," también "," asimismo "," igualmente "," asimismo "," de igual modo "," de igual manera "," de igual forma "," del mismo modo "," por su parte "," de la misma manera "," de la misma forma "," por otro lado "];
// now do the global replace on str,
// but use a function to give us a random replacement string
str = str.replace(/#/g, function(m){ return rand[Math.floor(Math.random()*rand.length)]; });
// now write the updated str back to the spreadsheet
sheet3.getRange("C2").setValue(str);
}