javascript - Google 电子表格脚本

标签 javascript regex google-apps-script google-sheets

我在 Google 电子表格文档的特定工作表中有一列单元格。 此列使用内置 JOIN 命令引用另一个工作表中的多个值:

=JOIN(", ",Regular!B3,Regular!B9,Regular!B10,Regular!B11,Regular!B12,Regular!B13,Regular!B14)

每个此类单元的典型输出是一个以逗号分隔的整数列表,f.ex:

2、5、10、12、13

一些单元格使用这样的范围:

=JOIN(", ",Regular!B3:B9)

我想将这些单元格锁定在公式中,如下所示:Regular!$B$3,Regular!$B:$9...

现在,我希望每个引用都锁定列和行,但是让我选择行、列或两者的解决方案是更好的解决方案。

1) 我还没有找到一种不使用自定义脚本即可完成此操作的方法 - 我是否错过了什么?

2)我的自定义脚本解决方案尚未完成:

function eachCellInRange(range, op) {
  var numRows = range.getNumRows();
  var numCols = range.getNumColumns();
  for (var i = 1; i <= numRows; i++) {
    for (var j = 1; j <= numCols; j++) {
      op(range.getCell(i,j), i, j);
    }
  }
};

function lockCell(cell, row, col) {
  var formula = cell.getFormula();
  if(formula) {
    var startIdx = formula.indexOf('(');
    if(startIdx > 0) { 
      //!! REGEX HERE !! //
      cell.setValue(formula);
    }
  }
}

function lockRows() {
  var range = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getActiveRange();
  eachCellInRange(range, lockCell);
};

我需要制作一个正则表达式模式来识别公式的 B3、B9... 部分并将它们更改为 $B$3、$B$9... 但也不会在 B1:B8 情况下中断

目前所有引用均以 SheetName 为前缀! (例如常规!B9:B20),将来有些可能不会,所以首选最通用的解决方案。

最佳答案

我不确定这是否是您正在寻找的,但我会替换您目前拥有的一点:

if(formula) {
  var startIdx = formula.indexOf('(');
  if(startIdx > 0) { 
    //!! REGEX HERE !! //
    cell.setValue(formula);
  }
}

if(formula.substring(0,6) == "=JOIN(") {
  formula = formula.replace(/([A-Z]+(?=[0-9]))/g, function($1) {
    return "$" +$1 + "$";
  });
  alert(formula);
  // cell.setValue(formula);
}

这确保公式是 JOIN 公式。

另外,我对JS不太熟悉,但是我把它放在JSFiddle中看看进展如何。

警告:如果您的工作表名称包含字母数字字符(字母和数字的混合),此操作将会失败。

关于javascript - Google 电子表格脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18332376/

相关文章:

java - 数组中元素的梯度分布

javascript - Chrome “Scripts may close only the windows that were opened by it”错误

JavaScript 面向对象编程 :reach the method inside object

javascript - 将项目附加到容器的问题

regex - 是否可以测试正则表达式以查看其是否减少为。*

go - 调用 Google Apps 脚本

regex - Kotlin 正则表达式线程安全

C++11 正则表达式子串匹配

google-apps-script - 使用 Google Apps 脚本将值和格式复制到另一个 Google 电子表格

json - 使用 Google Apps 脚本发布 JSON 数据