Google Apps脚本/ Google表格错误?复制/重新设置数据验证引用命名范围不适用于重复的表格

问题描述 投票:0回答:1

SEE THIS EXAMPLE HERE

情况:通过直接引用(A1Notation)引用范围的单元格的数据验证以及引用命名范围的其他单元格上的数据验证。

同时适用。

复制工作表时,两者仍然有效。但是,当手动将数据验证重置为相同的范围或通过我的脚本时,数据验证通过命名范围引用的单元格的数据验证将不起作用,并且无法通过引用命名范围再次设置它手动或通过脚本复制(.getDataValidation / .setDataValidation)。

查看示例 - 在Sheet1上运行脚本函数cp_dataValidation(),将Sheet1的Cop​​y作为活动工作表。然后单击单元格中的数据验证下拉列表。

enter image description here

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

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));
}
google-apps-script google-sheets google-sheets-macros
1个回答
1
投票
  • 您希望将包含命名范围的数据验证复制为值。

如果我的理解是正确的,那么这个变通方法呢?似乎nr_target.setDataValidation(named_range_tmpl.getDataValidation())不能用于其他工作表的命名范围。那么作为一种解决方法,如何使用copyTo()的方法?

Modified script:

var sheet = SpreadsheetApp.getActiveSheet();
var source = sheet.getRange("B2:C2");
var target = sheet.getRange("D2:E2");
source.copyTo(target, SpreadsheetApp.CopyPasteType.PASTE_DATA_VALIDATION);
target.clearContent(); // or target.clear({contentsOnly: true}); // Added

Note:

  • 请测试两个工作表的脚本。
  • 如果要复制值和数据验证,请使用source.copyTo(target)而不是source.copyTo(target, SpreadsheetApp.CopyPasteType.PASTE_DATA_VALIDATION)

Reference:

© www.soinside.com 2019 - 2024. All rights reserved.