我在Google Spreadsheet文档的特定工作表中有一列单元格。此列使用内置的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为前缀!(例如,Regular!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中以查看其运行方式。
警告:如果工作表名称包含字母数字字符(字母和数字的混合),则此操作将失败。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句