скрипт Google Apps, как скопировать условное форматирование в другой лист - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть электронная таблица Google с десятками идентичных листов в отношении формата.Я должен применить одно и то же условное форматирование ко всем листам, поэтому я хотел бы сделать это вручную на первом листе, а затем использовать скрипт Служб Google, чтобы применить условное форматирование ко всем остальным листам.Я выполнил приведенную ниже кодировку, но получил ошибку, которая в переводе с французского говорит: «Условное правило форматирования не может ссылаться на другой лист».

function myFunction() {
  var my_spreadsheet = SpreadsheetApp.getActiveSpreadSheet(); 

  var all_sheets = my_spreadsheet.getAllSheets();  
  var source_sheet = all_sheets[0];  
  var source_rules = source_sheet.getConditionalFormatRules();

  var destination_sheet;

  for (var i=1; i<=all_sheets.length-1; i++){
    destination_sheet = all_sheets[i];
    destination_sheet.setConditionalFormatRules(source_rules); 
  }    
}

Знаете ли вы, как я могу скопировать условное форматирование с одного листа на другой с помощью Google Apps Script или любым другим способом?

1 Ответ

0 голосов
/ 28 февраля 2019
  • Вы хотите скопировать условные форматы в исходном листе на все остальные листы.

Если я правильно понимаю, как насчет использования Sheets API?Я думал, что причиной возникновения такой ошибки может быть информация из исходного листа, включенная в условные форматы.Исходя из этого, я изменил информацию листа, используя Sheets API для копирования условных форматов.Я думаю, что есть несколько ответов для вашей ситуации.Поэтому, пожалуйста, подумайте об этом как об одном из них.

Когда вы используете Sheets API, пожалуйста, включите Sheets API в Advanced Google Services и консоли API.О том, как включить API Sheets, можно узнать по здесь .

Пример сценария:

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);
}

В этом сценарии выполняется следующий поток.

  1. Получить объект условного формата из исходного листа, используя Spreadsheets.get().
    • В вашем скрипте предполагается, что исходный лист является первым индексом листов.
  2. Создайте тело запроса для Spreadsheets.batchUpdate().
    • В настоящее время информация листа (sheetId) изменяется.
  3. Запросите созданное тело запроса, используя Spreadsheets.batchUpdate().

Примечание:

  • В вашем скрипте есть орфографическая ошибка на SpreadsheetApp.getActiveSpreadSheet(), а метод на my_spreadsheet.getAllSheets() не используется.Но в вашем вопросе написано, что ошибка The conditional formating rule can't refer to antoher sheet происходит.Исходя из этой ситуации, я подумал, что это может быть связано с неправильным написанием, когда вы разместили вопрос.

Ссылки:

Если я неправильно понял ваш вопрос, и это был не тот результат, который вы хотите, яизвиняться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...