首页 > 解决方案 > 根据其他单元格值应用 ClearContents 函数

问题描述

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

这是我到目前为止基于时间触发器所做的事情:

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 用户单击选项或写一个特定单词以使这两个功能起作用的菜单。感谢你们

标签: google-apps-scriptgoogle-sheetsgoogle-sheets-api

解决方案


我需要更多的细节来完成这个。但是这种方法应该有效。请记住,您不能从脚本编辑器调用这些函数或从菜单启动它们。您必须使用 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;
        }
      }
    }
  }
}

推荐阅读