Google apps script Can';t设置复选框数据验证
我已经尝试自动添加复选框作为数据验证。选中的为1,未选中的为0。 如果我试图手动设置,一切正常。当我尝试使用一些字符串,比如Google apps script Can';t设置复选框数据验证,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我已经尝试自动添加复选框作为数据验证。选中的为1,未选中的为0。 如果我试图手动设置,一切正常。当我尝试使用一些字符串,比如'Approved'作为默认值时,它也在工作。我尝试使用'true'字符串,但也遇到了同样的问题。若我试图手动修改验证—数据验证窗口中的所有内容都是正确的,然后我按下“OK”(无任何更改)—问题就消失了 示例代码: function make_checkboxes(){ var cell = SpreadsheetApp.getActive().getActiveR
'Approved'
作为默认值时,它也在工作。我尝试使用'true'
字符串,但也遇到了同样的问题。若我试图手动修改验证—数据验证窗口中的所有内容都是正确的,然后我按下“OK”(无任何更改)—问题就消失了
示例代码:
function make_checkboxes(){
var cell = SpreadsheetApp.getActive().getActiveRange();
var rule = SpreadsheetApp.newDataValidation().requireCheckbox(1, 0).build();
cell.setDataValidation(rule);
}
var range = spreadsheet.getSheetByName('hacks_and_workarounds').getRange('A1');
valid_rule = range.getDataValidation();
SpreadsheetApp.getActiveSpreadsheet().getActiveRange().setDataValidation(valid_rule);
复制步骤:
当我试图找到一个解决方法并复制验证(从脚本)时,我出现了一个错误: “消息详细信息 访问id为1UWvTC3mswQ0lh23eZDq49lr2VNeQ8tEMrzlpF0Kv07c的文档时,服务电子表格失败。“ 示例代码:
function make_checkboxes(){
var cell = SpreadsheetApp.getActive().getActiveRange();
var rule = SpreadsheetApp.newDataValidation().requireCheckbox(1, 0).build();
cell.setDataValidation(rule);
}
var range = spreadsheet.getSheetByName('hacks_and_workarounds').getRange('A1');
valid_rule = range.getDataValidation();
SpreadsheetApp.getActiveSpreadsheet().getActiveRange().setDataValidation(valid_rule);
问题 带有数字约束的复选框
DataValidation
将导致“无效:此单元格的内容违反其验证规则”错误
解释和测试
我决定重现这个问题,并在示例电子表格上复制了相同的DataValidation
builder(未设置格式,验证已清除,等等)。这个问题被成功地重现了,但引起我注意的是getCriteriaValues()
方法的输出。为了进行测试,我使用了以下函数:
function getDataValidation() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sh = ss.getActiveSheet();
const cell = sh.getActiveCell();
const dataValidation = cell.getDataValidation();
const allowed = dataValidation.getCriteriaValues();
const ui = SpreadsheetApp.getUi();
ui.alert(`Allowed values: ${allowed.join(", ")}, type: ${typeof allowed[0]}`);
}
产出表明:
允许的值:1.0,0.0,类型:字符串
请注意值的类型(人们可能希望它是一个数字
)。我添加了一个小实用程序,用于检查给定单元格的当前值、显示值和数字格式
以下是使用的实用程序(供参考):
如果格式设置为自动(默认),则输出如下:
解决方案
如果要以编程方式设置正确的格式,可以将(或其批处理等效项)与“@”
参数一起使用(强制将内容设置为纯文本):
注释
any
(例如,检查TS声明文件)requireCheckbox()
方法getCriteriaType()
方法getNumberFormat()
方法getDisplayValue()
方法肯定有一些意想不到的结果。有一个问题与此类似@Cooper-能够复制我自己。验证需要单元格的纯文本格式(测试表明1.0或0.0作为type
string
返回)。我不明白为什么,但这可能是一个文档错误,将添加一个答案。我发现使用TRUE和FALSE会导致问题,如果从菜单中使用insertCheckBox方法,值就是这些问题。我还发现使用“1”和“0”也不起作用。这个盒子的签名我觉得很难辨认understand@Cooper-我还发现规范令人困惑,但它有一个更简单的解释-d.ts文件使用any
类型声明了requirecBox
,该类型很可能在文档中转换为Object
。虽然我同意,这不是一个借口,有一个不同的实际合同比广告。将检查真/假,但我怀疑这两种情况都是一样的。它显然不接受布尔基元或数字。
The value is "1.0 of type string"
Display value is "1.0" of type string
Format is
The value is "true of type string"
Display value is "true" of type string
Format is
rng.setNumberFormat("@"); //assuming rng is defined elsewhere