![](/img/trans.png)
[英]Google Sheets Sidebar User Input Drop-down Menu w/ Values from Spreadsheet Range
[英]Google sheets data validation drop-down menu show values but paste formula?
我有一个存储在一个范围内的超链接列表,我希望在不同的列中进行数据验证,允许您从链接“文本”中进行选择,然后粘贴完整的单元格公式。 目前数据验证单元格的工作方式仅包含单元格值。
链接到示例表
一些表 function 代码:
C2: =HYPERLINK("#rangeid=901904080","Cell E2")
C3: =HYPERLINK("#rangeid=951806747","Cell E3")
C4: =HYPERLINK("#rangeid=743771733","Cell E4")
自动录制的脚本代码:
function DV() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('C2').activate();
spreadsheet.getRange('A2:A').setDataValidation(SpreadsheetApp.newDataValidation()
.setAllowInvalid(false)
.requireValueInRange(spreadsheet.getRange('Sheet2!$C$2:$C'), true)
.build());
};
我可以对脚本代码做些什么来让它粘贴公式而不是值? 或者是在选择新值时尝试触发的最佳选择,然后执行以下操作:
攻击! 伪代码
onEdit(e){
//pseudo code
if e.range in column A{
var sourceRange = sheet.getRange("C2:C")
var index = sourceRange.indexOf(e.range.getValue())
e.range.setFormula(sourceRange[index].getFormula())
}
}
这有点棘手,但我想我使用DataValidationBuilder找到了解决方案。 它与您的类似,但使用getFormulas()
以及验证属性requireValueInList()
,它要求字符串数组。
主要问题是当您使用 select 公式时,“无效规则”通知会跳入,例如,公式将单元格值更改为“单元格 C3”。 因此,为了解决这个悖论,您需要将setAllowInvalid(boolean)
设置为false
:
function DV(){
var spreadsheet = SpreadsheetApp.getActive();
var cells = spreadsheet.getRange('A2:A');
var rule = SpreadsheetApp.newDataValidation()
.requireValueInList(spreadsheet.getRange('C2:C').getFormulas())
.setAllowInvalid(false)
.build();
cells.setDataValidation(rule);
}
由于 500 项限制在我的情况下是不可接受的,因此我通过检查已编辑单元格上的数据验证规则解决了该问题,如果存在,则交换数据的值。
MWE:
function onEdit(e){
if (e.range.getDataValidation() != null){
swapValueForFormula(e.range);
}
function swapValueForFormula(cell){
var val = cell.getValue();
var rule = cell.getDataValidation();
var source = rule.getCriteriaValues()[0];
var vals = source.getValues();
var index = vals.join().split(",").indexOf(val);
if (index != -1){
var formula = source.getCell(index+1, 1).getFormula()
cell.setFormula(formula)
}
}
感谢您的所有意见和建议,这些意见和建议使我得到了这个答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.