繁体   English   中英

谷歌表格数据验证下拉菜单显示值但粘贴公式?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM