[英]Google Apps Script/Google Sheet Bug? Copying/Re-Setup Data Validation refering to named range does not work on duplicated Sheets
情況:通過直接引用(A1Notation)對引用范圍的單元格進行數據驗證,對引用命名范圍的其他單元格進行數據驗證。
兩者均可。
復制工作表時,兩者仍然有效。 但是,當手動將數據驗證重置為相同的范圍或通過我的腳本進行設置時,數據驗證通過命名范圍引用的單元格的數據驗證將不起作用,也無法通過命名范圍引用進行重新設置手動或通過腳本復制(.getDataValidation / .setDataValidation)。
查看示例-在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_target.setDataValidation(named_range_tmpl.getDataValidation())
不能用於其他工作表的命名范圍。 因此,作為一種解決方法,如何使用copyTo()
方法?
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
source.copyTo(target)
而不是source.copyTo(target, SpreadsheetApp.CopyPasteType.PASTE_DATA_VALIDATION)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.