如何复制数据验证以一种相对的方式,从范围内具体列出(有或无脚本)谷歌表(How to copy da

2019-09-28 02:50发布

我创建了一个电子表格来跟踪约会。 在这个电子数据表我有动态依赖下拉列表,所以从列表中选择1将填充在列表2.这是如下的选项:

小区C2:客户端 - 客户端1或客户端2(这是一种使用的例子中,实际列表将扩大。)

如果小区C2 =客户端1,则地址下拉是如下:

单元C3:地址 - 地址1或地址2。

如果小区C2 =客户端2,则地址下拉是如下:

单元C3:地址 - 地址3或地址4。

客户端列表中的数据验证很简单,因为这是恒定的,可以从列被复制到列。 对于依赖地址列表中的数据验证,但不能跨多个列复制,因为它总是引用C列,失去与相关客户名单连接。

对于小区C3(地址列表)的实际数据验证如下所示:

小区范围= '日记(V-2.1)'!C3

!标准= '日记(V-2.1)' C53:C55

将细胞C53:C55是由过滤器式,这将依赖于客户端的在小区C2的选择相关的地址进行排序填充,这反过来填充C3中的地址列表。

这可能是值得指出的是,我有10套每列这些预约时段(每天10个),所以我使用了一个过滤器的功能对于每个单独的约会,使他们独立工作,但即使这是乏味的,所以我需要的是能够向前复制从列C的列(或只是数据验证)和它留相对于该列中的过滤器的功能。

请参阅以下链接到电子表格例子,这将是行得通的! 在这个例子中我已经复制C列列d和地址列表中的数据验证已拆除,以便所有十个预约空档。 (许可是免费提供给所有编辑。)

https://docs.google.com/spreadsheets/d/1sOlQEzG1D29RaY86YeR1Da--c8t94J-ZAGjv52U4dsY/edit#gid=1950191921

注意:这些细胞必须在下拉列表 - 从列表范围 - 这个特定的电子表格的功能。

如果任何人都可以在这方面帮助这将是大规模理解,因为我已经努力走遍了论坛,并不能找到一个解决方案。 我没有看到这个视频(这是大大超过我的头),这似乎做到这一点使用Java脚本:

https://www.youtube.com/watch?v=ZiYnuZ8MwgM&feature=youtu.be

Answer 1:

谷歌表目前还没有可供复制内置的解决方案/填充数据验证引用或公式比较。 但有人已经在此写了一个不错的剧本谷歌文档论坛上发帖 。 为了避免只是一个链接作为一个答案,我会在脚本和说明这里复制。 感谢AD:上午从谷歌文档论坛。

如何使用自己的脚本:

  1. 横跨要复制的数据验证规则选择的单元格区域, 相对
  2. 从验证+自定义菜单,选择相应的选项(相对所有引用,绝对列,或行绝对)
  3. 左上单元的验证将被复制到该范围的其余部分

链接到原来的解决方案的例子谷歌与表脚本已经包含了 -你可以保存自己的副本,然后开始使用。

或者重新建立新,这里是脚本。

function onOpen()
{
  SpreadsheetApp.getActiveSpreadsheet().addMenu
  (
    "Validation+",
    [
      {name: "Copy validation (all relative references)", functionName: "copyValidation"},
      {name: "Copy validation (relative rows, absolute columns)", functionName: "copyValidationColumnsAbsolute"},
      {name: "Copy validation (absolute rows, relative columns)", functionName: "copyValidationRowsAbsolute"}
    ]
  );
}

function copyValidation(rowsAbsolute, columnsAbsolute)
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var r = ss.getActiveRange();
  var dv = r.getDataValidations();
  var dvt = dv[0][0].getCriteriaType();
  if (dvt != SpreadsheetApp.DataValidationCriteria.VALUE_IN_RANGE) return;
  var dvv = dv[0][0].getCriteriaValues();
  Logger.log(dvv);
  for (var i = 0; i < dv.length; i++)
  {
    for (var j = i ? 0 : 1; j < dv[0].length; j++)
    {

      dv[i][j] = dv[0][0].copy().withCriteria(dvt, [dvv[0].offset(rowsAbsolute ? 0 : i, columnsAbsolute ? 0 : j), dvv[1]]).build();
    }
  }
  r.setDataValidations(dv);
}

function copyValidationRowsAbsolute()
{
  copyValidation(true, false);
}

function copyValidationColumnsAbsolute()
{
  copyValidation(false, true);
}


文章来源: How to copy data validation in a relative way, specifically list from range (with or without scripts) Google Sheets