Javascript 仅查找和替换特定列的宏

Javascript 仅查找和替换特定列的宏,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我正在使用工作表中的宏,以便用HTML等价物替换特殊字符。我需要脚本以特定列为目标,同时忽略其他列(例如包含URL的列) 以下是我正在使用的先前编码的脚本: function FindAndReplace() { var data_range = SpreadsheetApp.getActiveSheet().getDataRange(); var num_rows = data_range.getNumRows(); var num_columns = data_range.get

我正在使用工作表中的宏,以便用HTML等价物替换特殊字符。我需要脚本以特定列为目标,同时忽略其他列(例如包含URL的列)

以下是我正在使用的先前编码的脚本:

function FindAndReplace() {
  var data_range = SpreadsheetApp.getActiveSheet().getDataRange();
  var num_rows = data_range.getNumRows();
  var num_columns = data_range.getNumColumns();
  var find_replace = {
      "&": "&",
      " - ": " – ",
      "'": "'",
  }

  Object.keys(find_replace).map(function(find) {
    var replace = find_replace[find];
    for (var row=2; row <= num_rows; row++) {
     for (var col=1; col <= num_columns; col++) {
        var value = data_range.getCell(row, col).getValue();
        if (data_range.getCell(row, col).getFormula()) {continue;}
        try {
           value = value.replace(find, replace);
           data_range.getCell(row, col).setValue(value);
        }
        catch (err) {continue;}
     }
  }
 });
}
我一直试图编辑它,只选择第1、3和5列,但它出错了。它目前只能按现在的方式工作。我只想让它选择特定的列,而忽略其余的列


我不太熟悉JavaScript,因此非常感谢您的帮助

我相信你的目标如下

  • 您希望使用活动工作表特定列中的
    find\u replace
    对象替换值
  • 您不希望替换具有公式的单元格
  • 您希望使用谷歌应用程序脚本实现这一点
修改点:
  • 关于
    此脚本正在工作,但它正在对整个工作表进行更改。
    在脚本中,
    var num\u columns=data\u range.getNumColumns()
    用于循环条件。对于每一列,循环从1到
    num\u列运行。我以为这就是你问题的原因
  • 而且,在您的脚本中,
    的目标理想情况下,我希望脚本忽略任何无法实现的包含&(例如&;)
    的HTML代码。当
    时&
    也替换为
    &
  • 在这个答案中,为了实现你的目标,我想提出以下流程。
  • 将目标列作为数组进行预排列
  • find\u replace
    的对象创建一个数组
  • 替换这些值。 3a。将这些值替换为其他唯一值。 3b。替换值的键。 3c。将唯一值替换为值
  • 使用TextFinder运行替换值。
    • 我认为在您的情况下使用TextFinder时,脚本的处理成本可能会降低
当上述流程反映到脚本中时,它将变成如下所示

示例脚本: 参考资料:

欢迎光临。GoogleApps脚本使用JavaScript,而不是Java。请显示您试图根据实际目标调整脚本的内容,并按照中的建议添加搜索工作的简要说明。抱歉,具体问题在于脚本中的这一行,“for(var col=1;col
for (var col=1; col <= num_columns; col++) {
function FindAndReplace2() {
  // 1. Preapare the target columns as an array.
  var targetColumns = [2, 5]; // 2 and 5 means the column "B" and "E", respectively.
  var find_replace = {
      "&": "&amp;",
      "-": "&amp;",
      "'": "&#39;",
  }

  // 2. Create an array from the object of `find_replace`.
  var ar = Object.entries(find_replace).map(([k, v]) => ({k: k, v: v, u: Utilities.getUuid().replace(/-/g, "")}));
  
  // 3. Replace the values.
  var sheet = SpreadsheetApp.getActiveSheet();
  targetColumns.forEach(c => {
    var range = sheet.getRange(1, c, sheet.getLastRow());
    ar.forEach(({k, v, u}) => {
      // 3a. Replace the values to other unique values.
      range.createTextFinder(v).replaceAllWith(u);

      // 3b. Replace the keys to the values.
      range.createTextFinder(k).replaceAllWith(v);

      // 3c. Replace the unique values to the values.
      range.createTextFinder(u).replaceAllWith(v);
    });
  });
}