Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 谷歌应用程序脚本/谷歌工作表错误?复制/重新设置引用命名范围的数据验证在重复的图纸上不起作用_Google Apps Script_Google Sheets_Google Sheets Macros - Fatal编程技术网

Google apps script 谷歌应用程序脚本/谷歌工作表错误?复制/重新设置引用命名范围的数据验证在重复的图纸上不起作用

Google apps script 谷歌应用程序脚本/谷歌工作表错误?复制/重新设置引用命名范围的数据验证在重复的图纸上不起作用,google-apps-script,google-sheets,google-sheets-macros,Google Apps Script,Google Sheets,Google Sheets Macros,情况: 通过直接引用(A1Notation)对引用范围的单元格进行数据验证,并对引用命名范围的其他单元格进行数据验证 两者都有效 在复制工作表时,两者都可以工作。但是,当手动将数据验证重置为相同范围或通过“我的脚本”重置时,数据验证通过命名范围引用的单元格的数据验证将不起作用,并且无法通过手动或通过脚本复制(.getDataValidation/.setDataValidation)通过命名范围引用来重新设置 function cp_dataValidation() { var sheet

情况: 通过直接引用(A1Notation)对引用范围的单元格进行数据验证,并对引用命名范围的其他单元格进行数据验证

两者都有效

在复制工作表时,两者都可以工作。但是,当手动将数据验证重置为相同范围或通过“我的脚本”重置时,数据验证通过命名范围引用的单元格的数据验证将不起作用,并且无法通过手动或通过脚本复制(.getDataValidation/.setDataValidation)通过命名范围引用来重新设置

function cp_dataValidation() {
  var sheet = SpreadsheetApp.getActiveSheet()

  //cell with data validation referring to a named range
  var named_range_tmpl = sheet.getRange("B2");
  //cell with data validation referring to a range via A1Notation
  var range_tmpl = sheet.getRange("C2");

  //target cells to copy dataValidation to
  var nr_target = sheet.getRange("D2");
  var r_target = sheet.getRange("E2");


  nr_target.setDataValidation(named_range_tmpl.getDataValidation());
  r_target.setDataValidation(range_tmpl.getDataValidation());


  Logger.log(JSON.stringify(named_range_tmpl.getDataValidation(), null, 2));
  Logger.log(JSON.stringify(range_tmpl.getDataValidation(), null, 2));
}
查看示例-在Sheet1上运行脚本函数cp_dataValidation(),并将Sheet1的副本作为活动工作表运行。然后单击单元格中的数据验证下拉列表

最后,我的目标是通过脚本在复制的工作表上从一个范围到另一个范围执行数据验证的副本(引用命名范围)

function cp_dataValidation() {
  var sheet = SpreadsheetApp.getActiveSheet()

  //cell with data validation referring to a named range
  var named_range_tmpl = sheet.getRange("B2");
  //cell with data validation referring to a range via A1Notation
  var range_tmpl = sheet.getRange("C2");

  //target cells to copy dataValidation to
  var nr_target = sheet.getRange("D2");
  var r_target = sheet.getRange("E2");


  nr_target.setDataValidation(named_range_tmpl.getDataValidation());
  r_target.setDataValidation(range_tmpl.getDataValidation());


  Logger.log(JSON.stringify(named_range_tmpl.getDataValidation(), null, 2));
  Logger.log(JSON.stringify(range_tmpl.getDataValidation(), null, 2));
}
  • 您希望复制数据验证,包括命名范围作为值
如果我的理解是正确的,那么这个变通方法怎么样?似乎
nr\u target.setDataValidation(命名范围\u tmpl.getDataValidation())
不能用于其他工作表的命名范围。因此,作为一种解决方法,使用
copyTo()方法怎么样

修改脚本: 注:
  • 请测试这两张表的脚本
  • 如果要复制值和数据验证,请使用
    source.copyTo(target)
    而不是
    source.copyTo(target,SpreadsheetApp.copypestype.PASTE\u Data\u Validation)
参考:

关于
当我使用您的示例电子表格和脚本(运行
cp\u dataValidation()
)时,数据验证通过命名范围引用的单元格的数据验证将不起作用,不幸的是,我无法复制您的情况。我可以问一下复制问题的方法吗?顺便问一下,你能在你的问题中添加你的脚本吗?你在两张纸上都尝试了数据验证下拉列表吗?谢谢你回答和更新你的问题。我可以复制你的情况。所以我提出了一个解决办法作为答案。你能确认一下吗?如果这不是你想要的结果,我很抱歉。没有太多的时间来检查-但是我想参考新复印的工作表中的指定范围。实际上,我只想在复制的工作表中,将数据验证从一个单元格(通过命名范围引用dv)复制到另一个单元格。使用数据值枚举的copyTo是个好主意,我在家时会尝试。WORKS!但是,也会复制当前设置的值。@谢谢您的回复。给您带来不便,我深表歉意。复印后我忘了清理内容。我更新了我的答案。你能确认一下吗?@haemse我的回答告诉你结果了吗?你能告诉我这件事吗?这对我的学习也很有用。如果这样做有效,其他与你有相同问题的人也可以将你的问题作为可以解决的问题。如果你对我的回答还有疑问,我道歉。那时候,我可以问一下你目前的情况吗?我想学习来解决你的问题。