根据 sheet 和 macro/script 的位置动态更新 rspreadsheet.getRange() 列
Dynamically updating rspreadsheet.getRange() column depending on the location of sheet with macro/script
我正在尝试 运行 Sheet1 上的一个宏,以通过动态更新列来验证 Sheet2 上的数据。它选择 Sheet1 中的整列(第一行除外),然后在 Sheet2 中的同一列上进行验证。如示例中所示,spreadsheet.getRange('\'Sheet2'!$P:$P')
被硬编码为始终使用 P2:P9。如果我正在验证 P 列,这很好,当我在 N 列中启动脚本时,如何动态更新它?
var spreadsheet = SpreadsheetApp.getActive();
var currentCell = spreadsheet.getCurrentCell();
spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.DOWN).activate();
currentCell.activateAsCurrentCell();
spreadsheet.getActiveRange().setDataValidation(SpreadsheetApp.newDataValidation()
.setAllowInvalid(false)
.requireValueInRange(spreadsheet.getRange('\'Sheet2'!$P:$P'), false)
.build());
};
我相信你的目标如下。
- 您想使用“Sheet2”的列将数据验证规则设置为活动 sheet,该列与 select 在活动 sheet 编辑的列相同。
为此,这个答案怎么样?
修改点:
- 在此修改中,从 selected 范围中检索 A1Notation,并从中检索列字母。这样,可以使用selected列字母中的值来设置数据有效性规则。
当你的脚本修改后,变成如下。
修改后的脚本:
请复制并粘贴以下脚本。为了使用这个脚本,请select“Sheet1”上的范围和运行这个函数myFunction
。这样,使用“Sheet2”中与 selected 列相同的列,并设置数据有效性规则。
function myFunction() {
var spreadsheet = SpreadsheetApp.getActive();
var currentCell = spreadsheet.getCurrentCell();
var range = spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.DOWN).activate(); // Modified
var column = range.getA1Notation().split(":")[0].replace(/\d+/g, ""); // Added
currentCell.activateAsCurrentCell();
spreadsheet.getActiveRange().setDataValidation(SpreadsheetApp.newDataValidation()
.setAllowInvalid(false)
.requireValueInRange(spreadsheet.getRange(`'Sheet2'!$${column}:$${column}`), false).build()); // Modified
}
- 在此修改中,您的脚本使用了从
2
到 9
的行。所以当你要修改这个的时候,请修改上面的脚本。
参考:
我正在尝试 运行 Sheet1 上的一个宏,以通过动态更新列来验证 Sheet2 上的数据。它选择 Sheet1 中的整列(第一行除外),然后在 Sheet2 中的同一列上进行验证。如示例中所示,spreadsheet.getRange('\'Sheet2'!$P:$P')
被硬编码为始终使用 P2:P9。如果我正在验证 P 列,这很好,当我在 N 列中启动脚本时,如何动态更新它?
var spreadsheet = SpreadsheetApp.getActive();
var currentCell = spreadsheet.getCurrentCell();
spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.DOWN).activate();
currentCell.activateAsCurrentCell();
spreadsheet.getActiveRange().setDataValidation(SpreadsheetApp.newDataValidation()
.setAllowInvalid(false)
.requireValueInRange(spreadsheet.getRange('\'Sheet2'!$P:$P'), false)
.build());
};
我相信你的目标如下。
- 您想使用“Sheet2”的列将数据验证规则设置为活动 sheet,该列与 select 在活动 sheet 编辑的列相同。
为此,这个答案怎么样?
修改点:
- 在此修改中,从 selected 范围中检索 A1Notation,并从中检索列字母。这样,可以使用selected列字母中的值来设置数据有效性规则。
当你的脚本修改后,变成如下。
修改后的脚本:
请复制并粘贴以下脚本。为了使用这个脚本,请select“Sheet1”上的范围和运行这个函数myFunction
。这样,使用“Sheet2”中与 selected 列相同的列,并设置数据有效性规则。
function myFunction() {
var spreadsheet = SpreadsheetApp.getActive();
var currentCell = spreadsheet.getCurrentCell();
var range = spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.DOWN).activate(); // Modified
var column = range.getA1Notation().split(":")[0].replace(/\d+/g, ""); // Added
currentCell.activateAsCurrentCell();
spreadsheet.getActiveRange().setDataValidation(SpreadsheetApp.newDataValidation()
.setAllowInvalid(false)
.requireValueInRange(spreadsheet.getRange(`'Sheet2'!$${column}:$${column}`), false).build()); // Modified
}
- 在此修改中,您的脚本使用了从
2
到9
的行。所以当你要修改这个的时候,请修改上面的脚本。