如何以相对方式复制数据验证,特别是范围内的列表(有或没有脚本)Google 工作表
How to copy data validation in a relative way, specifically list from range (with or without scripts) Google Sheets
我创建了一个跨页 sheet 来跟踪约会。在此传播中 sheet 我有动态相关的下拉列表,因此列表 1 中的选择将填充列表 2 中的选项。如下所示:
Cell C2: Client - Client 1 or Client 2.(此为示例使用,实际列表会展开。)
如果单元格 C2 = 客户端 1,则地址下拉如下:
单元格 C3:地址 - 地址 1 或地址 2。
如果单元格 C2 = 客户端 2,则地址下拉如下:
单元格 C3:地址 - 地址 3 或地址 4。
客户列表的数据验证很简单,因为这是常量,可以从一列复制到另一列。然而,依赖地址列表的数据验证不能跨多个列复制,因为它总是引用 C 列并失去与相关客户端列表的连接。
单元格 C3(地址列表)的实际数据验证如下:
单元格范围 = 'DIARY (V-2.1)'!C3
条件 = 'DIARY (V-2.1)'!C53:C55
单元格 C53:C55 由筛选公式填充,该公式将根据单元格 C2 中的客户端选择对相关地址进行排序,这反过来又会填充 C3 中的地址列表。
可能值得注意的是,我每列有 10 组这样的约会时段(每天 10 次),所以我为这些单独的约会中的每一个都使用了过滤器功能,因此它们独立工作,但即使这样也很乏味所以我的需要是能够从 C 列开始复制列(或仅复制数据验证),并使其相对于该列中的筛选函数保持不变。
请参阅下面的link示例传播sheet,这一切都有意义!在示例中,我已将 C 列复制到 D 列,地址列表的数据验证已针对所有十个约会空档分离。 (所有人都可以免费编辑。)
注意:这些单元格必须是下拉列表 - 范围内的列表 - 才能实现此特定传播的功能sheet。
如果有人可以帮助解决这个问题,我将不胜感激,因为我已经认真地搜索了论坛但找不到解决方案。我确实看到了这个视频(这让我难以理解)似乎是使用 java 脚本完成的:
https://www.youtube.com/watch?v=ZiYnuZ8MwgM&feature=youtu.be
Google Sheets 目前没有针对 copying/filling 数据验证引用或公式的内置解决方案。但是有人已经在 Google 文档论坛的 Google Docs forum post. To avoid just a link as an answer, I'm going to copy in the script and instructions here. Credit to AD:AM 中写了一个不错的脚本。
如何使用他们的脚本:
- Select 您要复制数据有效性规则的单元格范围,相对
- 从 Validation+ 自定义菜单中,select 适当的选项(所有引用相对、列绝对或行绝对)
- 左上角单元格的验证将被复制到范围的其余部分
Link to original solution's example Google Sheets with script already included - 您可以保存自己的副本然后开始使用。
或者从头开始重新创建,这里是脚本。
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);
}
如果您只需要单个 sheet 的相对副本,您可以使用具有相对验证的 OpenOffice 或 LibreOffice 生成 ods。这是通过删除 $ 符号来完成的。如果您随后将 sheet 加载到您的 google 驱动器并允许将其转换为 google sheet,如果您将其复制到任何位置,数据验证范围将是相对的同样sheet。如果您将它复制到同一工作簿或其他 google 传播sheet 中的另一个 sheet,则它不是相对的。
例如,如果您将右侧的三个单元格作为 A7 的验证,您将得到如下内容:
一旦你在没有 $ 的情况下保存它,它就是相对的。然后,当您上传它时,您会得到一个带有相对验证的 sheet。
我创建了一个跨页 sheet 来跟踪约会。在此传播中 sheet 我有动态相关的下拉列表,因此列表 1 中的选择将填充列表 2 中的选项。如下所示:
Cell C2: Client - Client 1 or Client 2.(此为示例使用,实际列表会展开。)
如果单元格 C2 = 客户端 1,则地址下拉如下:
单元格 C3:地址 - 地址 1 或地址 2。
如果单元格 C2 = 客户端 2,则地址下拉如下:
单元格 C3:地址 - 地址 3 或地址 4。
客户列表的数据验证很简单,因为这是常量,可以从一列复制到另一列。然而,依赖地址列表的数据验证不能跨多个列复制,因为它总是引用 C 列并失去与相关客户端列表的连接。
单元格 C3(地址列表)的实际数据验证如下:
单元格范围 = 'DIARY (V-2.1)'!C3
条件 = 'DIARY (V-2.1)'!C53:C55
单元格 C53:C55 由筛选公式填充,该公式将根据单元格 C2 中的客户端选择对相关地址进行排序,这反过来又会填充 C3 中的地址列表。
可能值得注意的是,我每列有 10 组这样的约会时段(每天 10 次),所以我为这些单独的约会中的每一个都使用了过滤器功能,因此它们独立工作,但即使这样也很乏味所以我的需要是能够从 C 列开始复制列(或仅复制数据验证),并使其相对于该列中的筛选函数保持不变。
请参阅下面的link示例传播sheet,这一切都有意义!在示例中,我已将 C 列复制到 D 列,地址列表的数据验证已针对所有十个约会空档分离。 (所有人都可以免费编辑。)
注意:这些单元格必须是下拉列表 - 范围内的列表 - 才能实现此特定传播的功能sheet。
如果有人可以帮助解决这个问题,我将不胜感激,因为我已经认真地搜索了论坛但找不到解决方案。我确实看到了这个视频(这让我难以理解)似乎是使用 java 脚本完成的:
https://www.youtube.com/watch?v=ZiYnuZ8MwgM&feature=youtu.be
Google Sheets 目前没有针对 copying/filling 数据验证引用或公式的内置解决方案。但是有人已经在 Google 文档论坛的 Google Docs forum post. To avoid just a link as an answer, I'm going to copy in the script and instructions here. Credit to AD:AM 中写了一个不错的脚本。
如何使用他们的脚本:
- Select 您要复制数据有效性规则的单元格范围,相对
- 从 Validation+ 自定义菜单中,select 适当的选项(所有引用相对、列绝对或行绝对)
- 左上角单元格的验证将被复制到范围的其余部分
Link to original solution's example Google Sheets with script already included - 您可以保存自己的副本然后开始使用。
或者从头开始重新创建,这里是脚本。
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);
}
如果您只需要单个 sheet 的相对副本,您可以使用具有相对验证的 OpenOffice 或 LibreOffice 生成 ods。这是通过删除 $ 符号来完成的。如果您随后将 sheet 加载到您的 google 驱动器并允许将其转换为 google sheet,如果您将其复制到任何位置,数据验证范围将是相对的同样sheet。如果您将它复制到同一工作簿或其他 google 传播sheet 中的另一个 sheet,则它不是相对的。
例如,如果您将右侧的三个单元格作为 A7 的验证,您将得到如下内容:
一旦你在没有 $ 的情况下保存它,它就是相对的。然后,当您上传它时,您会得到一个带有相对验证的 sheet。