如何将数据验证传播到其他行?
How to propagate data validation to other rows?
Sheet Ranges
:
Sheet Work
:
在 sheet Ranges
单元格 A1:A5
中,我有一些值,比方说:One
、Two
、Three
、Four
、Five
。在单元格 B1
中,我有以下公式:=ARRAYFORMULA(transpose(if(Work!$A1<>"";$A:$A;"")))
根据 sheet [=11= 中的单元格 A1
是否使用上述值填充单元格 B1:F1
] 非空。
接下来,我选择了单元格 B1:F1
,然后使用填充手柄向下拖动选区以覆盖范围 B1:F10
。这复制了上述范围,但现在每一行都取决于 sheet Work
.
中的相应行
基本上,我创建了一个数据范围列表,仅当另一个 sheet 中的某些单元格非空时才填充这些数据范围。
最后,在 sheet Work
中,我为带有下拉列表的单元格 B1
添加了数据验证:
Ranges!B1:F1
这样做是在该单元格中创建一个下拉列表,其值为:One
、Two
、Three
、Four
、Five
但仅如果单元格 A1
非空!
现在回答我的问题 - 我想将此数据验证传播到具有填充句柄的其他行 (1 - 10),但下拉列表在每种情况下都取决于不同的 cell/row。 但在每种情况下,填充句柄只是从第一行复制验证规则。(您可以在第二张图片中看到,即使对于 A
列中包含空单元格的行仍然有带值的下拉菜单。
我如何传播它而不必在每种情况下手动更改数据验证规则中的单元格范围?
由于没有人提出更好的建议,我将以评论中的解决方案结束它。我使用了一个脚本来分别为每个单元格设置数据验证。我没有发布代码,因为我的实际 sheet 与这个示例完全不同,我将不得不重写整个代码。
这个解决方案远非理想,主要是因为您必须花时间在谷歌上搜索语法和函数,而且并不是每个人都希望在他们的 sheet 中包含脚本。但显然没有比这更好的了。
值得一提的是 fill-handle 在 Excel 中做了我想要的。我尝试在 excel 中创建此 sheet 并在 google sheet 中打开它,但失望地发现数据验证规则是 lost/broken过程。
function a(str)
{
if(str.uname.value=="")
{
document.getElementById("msg1").innerHTML="! Plz Enter Username";
str.uname.focus();
return false;
}
if(str.pass.value=="")
{
document.getElementById("msg1").innerHTML="Plz Enter Password...";
str.pass.focus();
return false;
}
if((str.pass.value.length<3)||(str.pass.value.length>8))
{
document.getElementById("msg1").innerHTML="Plz Enter Password 3 to 8";
str.pass.focus();
return false;
}
}
<?php
if(isset($_REQUEST['submit']))
{
$uname=$_REQUEST['uname'];
}?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<script type="text/javascript" src="valjs.js">
</script>
</head>
<body>
<form method="post" name="frm" onsubmit="return a(this)" enctype="multipart/form-data">
<table align="center" border="2" cellpadding="5px" cellspacing="0px" border="1px">
<tr>
<td><span style="color:#FF0000">* </span>username</td>
<td><input type="text" name="uname" id="uname" />
</td>
</tr>
<tr>
<td>Password</td>
<td><input type="password" name="pass" id="pass" />
</td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="submit" id="submit" value="Click" />
</td>
</tr>
</table>
</form>
<h4 align="center"><span id="msg1" style="color:#FF0000" >
</span>
</h4>
</body>
</html>
Sheet Ranges
:
Sheet Work
:
在 sheet Ranges
单元格 A1:A5
中,我有一些值,比方说:One
、Two
、Three
、Four
、Five
。在单元格 B1
中,我有以下公式:=ARRAYFORMULA(transpose(if(Work!$A1<>"";$A:$A;"")))
根据 sheet [=11= 中的单元格 A1
是否使用上述值填充单元格 B1:F1
] 非空。
接下来,我选择了单元格 B1:F1
,然后使用填充手柄向下拖动选区以覆盖范围 B1:F10
。这复制了上述范围,但现在每一行都取决于 sheet Work
.
基本上,我创建了一个数据范围列表,仅当另一个 sheet 中的某些单元格非空时才填充这些数据范围。
最后,在 sheet Work
中,我为带有下拉列表的单元格 B1
添加了数据验证:
Ranges!B1:F1
这样做是在该单元格中创建一个下拉列表,其值为:One
、Two
、Three
、Four
、Five
但仅如果单元格 A1
非空!
现在回答我的问题 - 我想将此数据验证传播到具有填充句柄的其他行 (1 - 10),但下拉列表在每种情况下都取决于不同的 cell/row。 但在每种情况下,填充句柄只是从第一行复制验证规则。(您可以在第二张图片中看到,即使对于 A
列中包含空单元格的行仍然有带值的下拉菜单。
我如何传播它而不必在每种情况下手动更改数据验证规则中的单元格范围?
由于没有人提出更好的建议,我将以评论中的解决方案结束它。我使用了一个脚本来分别为每个单元格设置数据验证。我没有发布代码,因为我的实际 sheet 与这个示例完全不同,我将不得不重写整个代码。
这个解决方案远非理想,主要是因为您必须花时间在谷歌上搜索语法和函数,而且并不是每个人都希望在他们的 sheet 中包含脚本。但显然没有比这更好的了。
值得一提的是 fill-handle 在 Excel 中做了我想要的。我尝试在 excel 中创建此 sheet 并在 google sheet 中打开它,但失望地发现数据验证规则是 lost/broken过程。
function a(str)
{
if(str.uname.value=="")
{
document.getElementById("msg1").innerHTML="! Plz Enter Username";
str.uname.focus();
return false;
}
if(str.pass.value=="")
{
document.getElementById("msg1").innerHTML="Plz Enter Password...";
str.pass.focus();
return false;
}
if((str.pass.value.length<3)||(str.pass.value.length>8))
{
document.getElementById("msg1").innerHTML="Plz Enter Password 3 to 8";
str.pass.focus();
return false;
}
}
<?php
if(isset($_REQUEST['submit']))
{
$uname=$_REQUEST['uname'];
}?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<script type="text/javascript" src="valjs.js">
</script>
</head>
<body>
<form method="post" name="frm" onsubmit="return a(this)" enctype="multipart/form-data">
<table align="center" border="2" cellpadding="5px" cellspacing="0px" border="1px">
<tr>
<td><span style="color:#FF0000">* </span>username</td>
<td><input type="text" name="uname" id="uname" />
</td>
</tr>
<tr>
<td>Password</td>
<td><input type="password" name="pass" id="pass" />
</td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="submit" id="submit" value="Click" />
</td>
</tr>
</table>
</form>
<h4 align="center"><span id="msg1" style="color:#FF0000" >
</span>
</h4>
</body>
</html>