Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 用数组中的随机值替换字符串中的每个匹配项_Google Apps Script - Fatal编程技术网

Google apps script 用数组中的随机值替换字符串中的每个匹配项

Google apps script 用数组中的随机值替换字符串中的每个匹配项,google-apps-script,Google Apps Script,我在单元格C2中有一个长字符串,字符串长度上有多次匹配(#)-我想从数组对象“rand”为每个匹配指定一个值。然后将我的新字符串重写回单元格C2 我的示例字符串可以是“这是一个字符串,这也是一个字符串,但这也是一个字符串” 我想从我的rand数组中向“#”的每个实例添加一个随机值 函数mergeAll(){ var doc=SpreadsheetApp.openById(脚本_PROP.getProperty(“1ixxxyl3ure1xfgbz76mefaxlnxegydzxomf6wq5yq

我在单元格C2中有一个长字符串,字符串长度上有多次匹配(#)-我想从数组对象“rand”为每个匹配指定一个值。然后将我的新字符串重写回单元格C2

我的示例字符串可以是“这是一个字符串,这也是一个字符串,但这也是一个字符串”

我想从我的rand数组中向“#”的每个实例添加一个随机值

函数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);
}