Google Script для очистки нескольких диапазонов.

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

function startWeek() {

  var confirm = Browser.msgBox('Did you **Close the Week** first?','Pressing YES will   clear your week', Browser.Buttons.YES_NO);

 if(confirm=='no'){Logger.log('The user clicked "NO."')};
 if(confirm=='yes'){
  var sheet = SpreadsheetApp.getActive().getSheetByName('INVOICE LOG');
    sheet.getRange('A3:M47').clearContent();
  var sheet = SpreadsheetApp.getActive().getSheetByName('DAILY INVENTORY');
    sheet.getRange('C5:C8').clearContent();
    sheet.getRange('D6:I8').clearContent();
    sheet.getRange('C10:I10').clearContent();
    sheet.getRange('C13:C16').clearContent();
    sheet.getRange('D14:I16').clearContent();
    sheet.getRange('C18:I18').clearContent();
    sheet.getRange('C21:C24').clearContent();
    sheet.getRange('D22:I24').clearContent();
    sheet.getRange('C26:I26').clearContent();
    sheet.getRange('C29:C32').clearContent();
    sheet.getRange('D30:I32').clearContent();
    sheet.getRange('C34:I34').clearContent();
    sheet.getRange('C37:C40').clearContent();
    sheet.getRange('D38:I40').clearContent();
    sheet.getRange('C42:I42').clearContent();
    sheet.getRange('C45:C48').clearContent();
    sheet.getRange('D46:I48').clearContent();
    sheet.getRange('C50:I50').clearContent();
    sheet.getRange('C55:C58').clearContent();
    sheet.getRange('D56:I58').clearContent();
    sheet.getRange('C60:I60').clearContent();
    sheet.getRange('C63:C66').clearContent();
    sheet.getRange('D64:I66').clearContent();
    sheet.getRange('C68:I68').clearContent();
    sheet.getRange('C71:C74').clearContent();
    sheet.getRange('D72:I74').clearContent();
    sheet.getRange('C76:I76').clearContent();
    sheet.getRange('C79:C82').clearContent();
    sheet.getRange('D80:I82').clearContent();
    sheet.getRange('C84:I84').clearContent();
    sheet.getRange('C87:C90').clearContent();
    sheet.getRange('D88:I90').clearContent();
    sheet.getRange('C92:I92').clearContent();
    sheet.getRange('C95:C98').clearContent();
    sheet.getRange('D96:I98').clearContent();
    sheet.getRange('C100:I100').clearContent();
    sheet.getRange('C105:C108').clearContent();
    sheet.getRange('D106:I108').clearContent();
    sheet.getRange('C110:I110').clearContent();
    sheet.getRange('C113:C116').clearContent();
    sheet.getRange('D114:I116').clearContent();
    sheet.getRange('C118:I118').clearContent();
    sheet.getRange('C121:C124').clearContent();
    sheet.getRange('D122:I124').clearContent();
    sheet.getRange('C126:I126').clearContent();
    sheet.getRange('C129:C132').clearContent();
    sheet.getRange('D130:I132').clearContent();
    sheet.getRange('C134:I134').clearContent();
    sheet.getRange('C137:C140').clearContent();
    sheet.getRange('D138:I140').clearContent();
    sheet.getRange('C142:I142').clearContent();
    sheet.getRange('C145:C148').clearContent();
    sheet.getRange('D146:I148').clearContent();
    sheet.getRange('C150:I150').clearContent();
  var sheet = SpreadsheetApp.getActive().getSheetByName('FOOD INVENTORY');
    sheet.getRange('D5:F615').clearContent();
  var sheet = SpreadsheetApp.getActive().getSheetByName('LIQUOR INVENTORY');
    sheet.getRange('D6:G361').clearContent();
    sheet.getRange('E365:G520').clearContent();
    sheet.getRange('D524:G573').clearContent();
  var sheet = SpreadsheetApp.getActive().getSheetByName('DAILY SALES SHEET');
    sheet.getRange('B4:H10').clearContent();
    sheet.getRange('B12:H12').clearContent();
    sheet.getRange('B14:H20').clearContent();
    sheet.getRange('B22:H27').clearContent();
    sheet.getRange('B29:H30').clearContent();
    sheet.getRange('B33:H34').clearContent();
    sheet.getRange('B36:H38').clearContent();
    sheet.getRange('B43:H44').clearContent();
  var sheet = SpreadsheetApp.getActive().getSheetByName('LAST WEEK INVENTORY');
    sheet.getRange('E3:E9').clearContent();
  var sheet = SpreadsheetApp.getActive().getSheetByName('SAFE AUDIT');
    sheet.getRange('C3:P11').clearContent();
    sheet.getRange('C14:P18').clearContent();
    sheet.getRange('C22:P22').clearContent();
 var destination = SpreadsheetApp.getActiveSpreadsheet();
 var name = Browser.inputBox('New Week', 'Enter Pub Name & WE Date (ex. SandwichWE02-02-14)', Browser.Buttons.OK);
   destination.rename(name)

}; }

1 ответ

Решение

К сожалению, в настоящее время нет метода Apps Script для очистки нескольких диапазонов одним вызовом функции.

То, что вам может показаться немного более простым в управлении, - это определить одну или несколько структур данных (даже простой массив), содержащих рассматриваемые диапазоны. Затем вы можете очистить их все, просто зацикливая структуру данных и вызывая clearContent() для каждого Range. Это отделит работу по отслеживанию ваших диапазонов от работы по их очистке. Структура данных также может быть полезна в других областях вашего кода.

Для лучшей организации вы также можете использовать функции Spreadsheet.setNamedRange() и Spreadsheet.getNamedRange() для назначения простых идентификаторов вашим диапазонам. Обратите внимание, что вы не можете дать более одного диапазона одно и то же имя.

Другие вопросы по тегам