用于清除多个范围的Google脚本。

时间:2014-02-14 01:58:29

标签: google-apps-script google-sheets

我有很多电子表格,每周填写一次,并在新一周开始时关闭。我已经编写了一个脚本,可以在很多不同的表格中清除各种范围。见下面的代码。我的问题是有更好的方法来做到这一点,而不是一次清除一个部分的范围,并有一百万个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 个答案:

答案 0 :(得分:0)

不幸的是,目前没有使用Apps Script方法通过单个函数调用来清除多个范围。

您可能会发现更容易管理的是定义包含相关范围的一个或多个数据结构(甚至是简单数组)。然后,您可以通过简单地循环数据结构并在每个Range上调用clearContent()来清除它们。这将把跟踪你的范围的工作与清除它们的工作分开。数据结构在代码的其他区域也可能很有用。

为了更好地组织,您还可以使用Spreadsheet.setNamedRange()和Spreadsheet.getNamedRange()函数为您的范围指定简单ID。请注意,您不能为多个Range指定相同的名称。