Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.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
Javascript 如何修复或调整Google Apps脚本中的查找和替换_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 如何修复或调整Google Apps脚本中的查找和替换

Javascript 如何修复或调整Google Apps脚本中的查找和替换,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我有一张工作表,我经常需要将大量数据粘贴到其中,并且需要进行十次“查找和替换”迭代来修复一些数据。我粘贴的数据来自一个数据库,由于某种原因,当他们导出它时,我将无法直接访问该数据库。许多常见的特殊字符,如或,会被置乱 我窃取并改编了一个脚本,在数据中的任何地方用其他字符串替换子字符串。脚本在活动工作表中搜索混乱的特定字符串,并用正确的字符替换它们 这个脚本工作得很好,只是出于一些未知的原因,它偶尔会将单个字符-替换为'。如果它是一致的,我可以处理它,但由于某些原因,它只是间歇性地发生。我怀疑这与

我有一张工作表,我经常需要将大量数据粘贴到其中,并且需要进行十次“查找和替换”迭代来修复一些数据。我粘贴的数据来自一个数据库,由于某种原因,当他们导出它时,我将无法直接访问该数据库。许多常见的特殊字符,如
会被置乱

我窃取并改编了一个脚本,在数据中的任何地方用其他字符串替换子字符串。脚本在活动工作表中搜索混乱的特定字符串,并用正确的字符替换它们

这个脚本工作得很好,只是出于一些未知的原因,它偶尔会将单个字符
-
替换为
'
。如果它是一致的,我可以处理它,但由于某些原因,它只是间歇性地发生。我怀疑这与下面第8行或第9行中的字符
|
基本上起着OR的作用有关,但我不明白为什么它只是偶尔这样做

一个完美的解决方案是停止这种间歇性更换。下一个最好的方法是调整脚本,在执行当前操作后,将出现的
替换回单个列G中的
-
。我认为我的技能水平(零)更容易达到的是制作一份脚本副本,它只会将G列中的
-
替换为
-

我的理解是,第5行中的
getValues()
基本上选择了整个工作表,我尝试用各种其他
get
东西来替换它,以便只抓取G5:G,但我不能完全让它工作。我绝对没有编码的经验,除非你把Sheets内置函数的一些相当巧妙的使用计算在内。不幸的是,我不理解调试时收到的错误消息

当前脚本:

function runReplaceInSheet(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
  //  get the current data range values as an array
  //  Fewer calls to access the sheet -> lower overhead 
  var values = sheet.getDataRange().getValues();  

  // Replace Subject Names
  replaceInSheet(values, /\'|-/g, "'");
  replaceInSheet(values, /\’|-/g, "'");
  replaceInSheet(values, /\√°|-/g, "á");
  replaceInSheet(values, /\√©|-/g, "é");
  replaceInSheet(values, /\√≠|-/g, "í");
  replaceInSheet(values, /\√≥|-/g, "ó");
  replaceInSheet(values, /\√Å|-/g, "Á");
  replaceInSheet(values, /\√Ø|-/g, "ï");
  replaceInSheet(values, /\ƒó|-/g, "ė");
  replaceInSheet(values, /\≈´|-/g, "ū");

  // Write all updated values to the sheet, at once
  sheet.getDataRange().setValues(values);
}

function replaceInSheet(values, to_replace, replace_with) {
  //loop over the rows in the array
  for(var row in values){
    //use Array.map to execute a replace call on each of the cells in the row.
    var replaced_values = values[row].map(function(original_value) {
      return original_value.toString().replace(to_replace,replace_with);
    });

    //replace the original row values with the replaced values
    values[row] = replaced_values;
  }
}
我曾多次尝试修改它,仅将
getValues
替换为命名范围
PO_EligibilityGG
或G列,但为了简洁起见,我将仅粘贴我认为最接近工作的版本:

function runReplaceInSheet(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet()
  //  get the current data range values as an array
  //  Fewer calls to access the sheet -> lower overhead 
  var values = sheet.getRange('PO_EligibilityGG');  

  // Replace Subject Names
  replaceInSheet(values, /\'|-/g, "-");


  // Write all updated values to the sheet, at once
  sheet.getRange('PO_EligibilityGG').setValues(values);
    }
...
错误消息:

例外:参数(SpreadsheetApp.Range)与SpreadsheetApp.Range.setValues的方法签名不匹配。 runReplaceInSheet@Code.gs:11


目前,我必须在3张不同的工作表上每天运行2到3次此替换,消除此问题只会让应用程序从中解脱出来。

根据我在您的案例中看到的情况,似乎您没有正确使用getRange获取G列中的值

使用getRange获取G列中的值时,请尝试以下代码:

function valuesOfColumnG(){
  var ss = SpreadsheetApp.getActiveSheet();
  var len = ss.getLastRow();
  for(var i = 1; i < len +1; i++){
    var valuesOfG = ss.getRange("G"+i).getValue();
    console.log('Values of G ' + valuesOfG);
  }
}
函数值sofColumnG(){
var ss=SpreadsheetApp.getActiveSheet();
var len=ss.getLastRow();
对于(变量i=1;i
电子表格的屏幕截图:

从G列获取值的日志中的实际值:

参考资料: