根据其他单元格值应用ClearContents函数

时间:2019-06-21 16:06:34

标签: google-apps-script google-sheets google-sheets-api

我有很多人每天都在使用的Google工作表,并且该工作表在一天的每一天都必须具有“重新启动”和“备份”功能。到目前为止,我使用ClearRange函数和MakeCopy函数将整个文件保存在我的另一个Google工作表文件夹中。这些功能正在基于时间的触发器上工作,我发现它不再与我无关,我想通过一个OnEdit函数来激活它们,该函数将基于单元格值和创建“菜单”的类型,这些菜单也将适用于Android用户。 / p>

这是我到目前为止根据时间触发所做的:

function clearRange() {
  var sheet = SpreadsheetApp.getActive().getSheetByName('work_sheet');
  sheet.getRange('A5:L200').clearContent();
  sheet.getRange('O5:P200').clearContent();
}



function makeCopy() {
// generates the timestamp and stores in variable formattedDate as year-month-date hour-minute-second
var formattedDate = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd' 'HH:mm:ss");

// gets the name of the original file and appends the word "copy" followed by the timestamp stored in formattedDate
var name = SpreadsheetApp.getActiveSpreadsheet().getName() + " Copy " + formattedDate;

// gets the destination folder by their ID. REPLACE xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx with your folder's ID that you can get by opening the folder in Google Drive and checking the URL in the browser's address bar
var destination = DriveApp.getFolderById("xxxxxxxxx(my google sheet folder URL)");

// gets the current Google Sheet file
var file = DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId())

// makes copy of "file" with "name" at the "destination"
file.makeCopy(name, destination);
}

我找到了一些尝试应用于函数的代码,但没有成功:

var FunctionsCell = "B2"  // global
function onEdit(e) {    
  var editCell = e.range.getA1Notation()

switch (editCell) {
case FunctionsCell: {               
      var functionType = SpreadsheetApp.getActiveSheet().getRange(FunctionsCell).getValue()

      switch(functionType) {              
        case "Do Task 1": {
          // do something
          break
        }
        case "Do Task 2": {
          // do something
          break
        }
      }
  }
  }
}

(在这一点上,它给我有关“ var editCell = e.range.getA1Notation()”的错误

只有在我没有指定特定范围的情况下,该功能才起作用

function onEdit3(e) {
  var ss = SpreadsheetApp.getActive()
  var sheet = SpreadsheetApp.getActiveSheet()
  var cell = sheet.getRange('O1')
  var cellContent = cell.getValue()

  if(cellContent === 100) {
    sheet.getRange('A5:L10').clearContents()
  }
}

我希望它成为供Android用户单击的菜单,或者单击一个特定的单词以使这两个功能正常工作。谢谢你们

1 个答案:

答案 0 :(得分:1)

我需要更多细节来完成此操作。但是这种方法应该可行。请记住,您无法从脚本编辑器调用这些功能,也无法从菜单启动它们。实际上,您必须使用onEdit()触发器运行它们,以便事件对象出现。这种调试可能很困难,通常会提高您的故障排除能力,或者可能只是让您放弃。

function onEdit(e) {    
  var sh=e.range.getSheet();
  var name=sh.getName();
  if(name !='Sheet1') return;//limits the functionality to one sheet
  switch (e.range.getA1Notation()) {
    case 'B2': {               
      var functionType = e.range.getSheet().getRange("B2").getValue()
      switch(functionType) {              
        case "task1": {
          // do something
          break
        }
        case "task2": {
          // do something
          break;
        }
      }
    }
  }
}