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列获取值的日志中的实际值:
参考资料: