我正在尝试编写脚本,该脚本将从控制电子表格中获取具有数据验证的单元格,并将其添加到另一个电子表格中的位置(相同)。
我正在使用:
var myCell = SpreadsheetApp.getActive().getRange('D4');
var rule = myCell.getDataValidation();
但是很明显,电子表格在脚本过程中没有处于活动状态,因此该规则为空。
答案 0 :(得分:0)
如果您可以检查this product forum,则在那里得到了回答。
此外,在SO post之一中提到当前不支持此功能。但是他们提供了解决方法。
复制sheet from the original post,然后执行以下步骤:
- 选择要复制数据的单元格范围
相对的验证规则- 从Validation +自定义菜单中,选择适当的选项(所有 引用相对,绝对列或绝对行)
- 左上角单元格的验证将复制到 范围
此外,如果您想从头开始创建,我会发布与SO帖子中指定的脚本相同的脚本:
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);
}