我在 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/