L.J*_*J.W 1 spreadsheet google-sheets-api google-sheets-query google-apps-script-editor
我创建了一个电子表格来跟踪约会。在此电子表格中,我具有动态相关的下拉列表,因此列表1中的选择将填充列表2中的选项。这如下:
单元格C2:客户端-客户端1或客户端2。(在此示例中使用,实际列表将扩展。)
如果单元格C2 =客户端1,则地址下拉列表如下:
单元格C3:地址-地址1或地址2。
如果单元格C2 =客户端2,则地址下拉列表如下:
单元格C3:地址-地址3或地址4。
客户端列表的数据验证很简单,因为它是常量,可以在列之间进行复制。但是,不能从多个地址复制对从属地址列表的数据验证,因为它始终引用C列,并且与相对客户列表失去连接。
单元格C3(地址列表)的实际数据验证如下:
单元格范围='DIARY(V-2.1)'!C3
条件='日记(V-2.1)'!C53:C55
单元格C53:C55由一个过滤器公式填充,该公式将根据单元格C2中客户端的选择对相关地址进行排序,从而依次填充C3中的地址列表。
可能值得注意的是,我每列有10组这些约会空位(每天10个),所以我对每个单独的约会都使用了过滤功能,因此它们可以独立工作,但是即使这很繁琐,所以我需要能够从C列开始复制该列(或仅进行数据验证),并使它相对于该列中的过滤器功能保持不变。
请查看下面的示例电子表格链接,这一切都说得通!在示例中,我已将C列复制到D列,并且地址列表的数据验证已针对所有十个约会空位分离。(所有编辑都是免费的。)
注意:这些单元格必须是下拉列表-范围列表-用于此特定电子表格的功能。
如果有人可以提供帮助,那么我将不胜感激,因为我勤奋地搜索了论坛并且找不到解决方案。我确实看过了这个视频(这是我的头),它似乎是使用Java脚本实现的:
https://www.youtube.com/watch?v=ZiYnuZ8MwgM&feature=youtu.be
Google表格目前没有内置的解决方案,可以相对地复制/填充数据验证参考或公式。但是有人已经在此Google Docs论坛帖子中写了一个不错的脚本。为了避免仅将链接作为答案,我将在此处复制脚本和说明。感谢Google Docs论坛中的AD:AM。
如何使用他们的脚本:
链接到包含解决方案的原始解决方案示例Google表格示例 -您可以保存自己的副本,然后开始使用。
或重新创建,这里是脚本。
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4500 次 |
| 最近记录: |