首页 > 解决方案 > 脚本在多列循环上运行如何只回发一次,而不是每列

问题描述

我的功能运行良好

它通过标题找到一列,然后 tt 在直径上拆分列中的单元格值,而不是替换片段的值,然后将它们重新连接成一个字符串

并对标题列表中的所有列重复

这有点啰嗦,但我很惊讶我让它工作得和它一样好

我需要帮助的问题是它会在每个标题上回发,你如何让它只回发一次?

我试图弄清楚这一点,但无济于事

谢谢

function FindRsplace(shtName, frshtName, cheaders, frheaders, dilm1, dilm2) {
  var sheet = SpreadsheetApp.getActive().getSheetByName(shtName);
  var hn =[];
  var fhn = [];

  //Array of column indices from column headers
  for (var k = 0; k <= cheaders.length-1; k++) {

       hn[k] = HTN(shtName,cheaders[k]) - 1;

       fhn[k] = HTN(frshtName,frheaders[k]);

  }

 for (var j = 0; j <= cheaders.length-1; j++) {

 var frSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(frshtName);
 var frLR = GLR(frshtName,frheaders[j],2);  // Get the last row of the Search column NOT of the Sheet
 var frRange = frSheet.getRange(2, fhn[j], frLR, 2);
 var frValues = frRange.getValues(); 

 // Read Height only once
 var maxHeight = Range.getLastRow();

 // Read all values and formulas at once
 var rangeValues = Range.getValues();

 // iterate through all cells in the selected range Look in Sheet
for (var cellRow = 0; cellRow < maxHeight; cellRow++) {
for (var i = 0; i < frValues.length; i++) {

        //FindReplace string fragments
        rangeValues[cellRow][hn[j]] = rangeValues[cellRow][hn[j]].toString().split(frValues[i][0]+dilm1).join(frValues[i][1]+dilm2).trim();

        //Replaceing the last fragment or the only string without dilimeter
        rangeValues[cellRow][hn[j]] = rangeValues[cellRow][hn[j]].toString().split(frValues[i][0]).join(frValues[i][1]).trim();

   }
 }

  Range.setValues(rangeValues);
  SpreadsheetApp.flush();
 } 
}

function FindRsplace_n() {

   FindRsplace(
  'sheet1', 'FindReplace',
  ["HeaderA", "HeaderB", "HeaderC"], 
  ["frHeaderA", "frHeaderB", "frHeaderC"]],
    ",",
   "|"
    );
 }

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


推荐阅读