def compare_dict(d1, d2, ignore):
for k in d1:
if k in ignore:
continue
try:
if d1[k] != d2[k]:
return False
except KeyError:
return False
return True
Редактирование комментария: вы можете сделать что-то вроде compare_dict(d1, d2, ignore) and compare_dict(d2, d1, ignore)
или дублировать for
def compare_dict(d1, d2, ignore):
ignore = set(ignore)
for k in d1:
if k in ignore:
continue
try:
if d1[k] != d2[k]:
return False
except KeyError:
return False
for k in d2:
if k in ignore:
continue
try:
if d1[k] != d2[k]:
return False
except KeyError:
return False
return True
. Все быстрее и чище! Обновление: набор трансляции (игнорирование)
Если я правильно понимаю, как насчет использования Sheets API? Я думал, что причиной возникновения такой ошибки может быть информация из исходного листа, включенная в условные форматы. Исходя из этого, я изменил информацию листа, используя Sheets API для копирования условных форматов. Я думаю, что есть несколько ответов для вашей ситуации. Поэтому, пожалуйста, подумайте об этом как об одном из них.
Когда вы используете Sheets API, включите Sheets API в консоли Advanced Google Services и API. О том, как включить Sheets API, вы можете узнать в здесь .
function myFunction() {
var my_spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var spreadsheetId = my_spreadsheet.getId();
var all_sheets = my_spreadsheet.getSheets();
var source_sheet = all_sheets[0].getSheetName();
var srcConditionalFormats = Sheets.Spreadsheets.get(spreadsheetId, {ranges: source_sheet, fields: "sheets/conditionalFormats"});
all_sheets.shift();
var cf = srcConditionalFormats.sheets[0].conditionalFormats;
var reqs = all_sheets.reduce(function(ar, e, i) {
return ar.concat(cf.map(function(f, j) {
var temp = JSON.parse(JSON.stringify(f));
temp.ranges = temp.ranges.map(function(g, k) {
g.sheetId = e.getSheetId();
return g;
});
return {addConditionalFormatRule: {rule: temp}};
}));
}, []);
Sheets.Spreadsheets.batchUpdate({requests: reqs}, spreadsheetId);
}
В этом сценарии запускается следующий поток.
Spreadsheets.get()
. Spreadsheets.batchUpdate()
. Spreadsheets.batchUpdate()
. SpreadsheetApp.getActiveSpreadSheet()
и никакой метод не используется в my_spreadsheet.getAllSheets()
. Но в вашем вопросе написано, что ошибка The conditional formating rule can't refer to antoher sheet
происходит. Исходя из этой ситуации, я подумал, что это может быть связано с неправильным написанием того, когда вы разместили вопрос. Если я неправильно понял ваш вопрос, и это был не тот результат, который вы хотите, я приношу свои извинения.