簡體   English   中英

讓腳本從具有多個選項卡的工作表中的下拉菜單運行

[英]Getting script to run from drop down menu in sheet with multiple tabs

希望我在正確的地方。 我正在制定維護計划,但遇到了一些麻煩。 我所擁有的是在工作表中創建的工作訂單表格,我編寫了一個腳本,它將以新名稱(與工作表中的單元格值綁定)保存模板的副本,驅動器上的文件夾。 我也有這個腳本在谷歌日歷上安排工作訂單。 此代碼如下。

function Create() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); // Get spreadsheet
  var id = ss.getId(); // Get spreadsheet ID
  var sstocopy = DriveApp.getFileById(id); //Get spreadsheet with DriveApp
  var sheet = ss.getActiveSheet(); // Grab the sheet in order to find the name of the new spreadsheet 
  to be created
  var sheet_name = sheet.getRange("C4").getValue(); // Get the value, in this case: Project Urn
  var folder = DriveApp.getFolderById("1D9gWUuHTPbWkzpSOp5vQdg-K8N6kUGo6"); // Get the folder where 
  the sheet needs to be placed.
  sstocopy.makeCopy(sheet_name,folder); // Make the copy of the sheet in that folder.

  var eventCal = 
  CalendarApp.getCalendarById("c_4um01s3eqvq7d5kqi0ga4i1098@group.calendar.google.com") ;
   var eventname = sheet_name;
   var eventstart = sheet.getRange("E3").getValue();
 var eventstop = sheet.getRange("E4").getValue();
  eventCal.createAllDayEvent(eventname, eventstart, eventstop);
  } 

現在這段代碼運行良好,我最初在工作表上有一個可點擊的按鈕來運行這段代碼,並且在計算機上運行良好。 棘手的部分是我希望能夠從 Ipad 的移動應用程序中運行它。 所以我一直在嘗試設置一個下拉菜單來運行腳本。 我的工作表文件有幾個頁面/標簽,我認為這是給我帶來問題的原因。 我假設我需要調用正確的工作表,但我似乎無法讓它工作。

我嘗試的第一個代碼是這個(除了我的下拉菜單在 F3 中)

function onEdit(e) {
  if (e.range.getA1Notation() == 'A1') {
    if (/^\w+$/.test(e.value)) {        
      eval(e.value)();
      e.range.clear();
    }
  }
}
    

但我收到 e.range.getA1Notation 的未定義錯誤。 我嘗試了其他一些事情,但我真的不知道自己在做什么,因為我的理解非常基礎,而且我已經很長時間沒有真正做過這樣的事情了。 任何幫助,將不勝感激。

這是您可以使用復選框作為按鈕來運行功能的一種方法。 為此,我使用了一個可安裝的 onEdit(e) 觸發器,以便它可以執行需要權限的功能。

function onMyEdit(e) {
  e.source.toast('Entry');
  console.log(JSON.stringify(e));//use this to see all of the features in the event object
  const sh=e.range.getSheet(); 
  if(sh.getName()=="Your Sheet Name" && e.range.columnStart==1 && e.value=="TRUE" ) {
    e.range.setValue('FALSE');
    switch(e.range.rowStart) {
      case 1:
        e.source.toast('function 1');
        break;
      case 2:
        e.source.toast('function 2');
    }
  }
}

我沒有任何 function 附加的想法是我有 e.source.toast('function 1'); 您可以用 function 調用替換整行。 這被設置為只運行一頁,但如果需要可以修改。

Animation:

在此處輸入圖像描述

如您所見,它可以設置為每次重置復選框,而不是顯示您選擇的 function 的 toast。 您始終可以在 function 名稱的復選框旁邊放置標簽。

而這個例子使用datavalidation創建一個下拉function選擇過程。 重要的是要記住 onEdit() function 必須在 30 秒內完成。

function onMyEdit(e) {
  e.source.toast('Entry');
  console.log(JSON.stringify(e));
  const sh=e.range.getSheet(); 
  if(sh.getName()=="Your Sheet Name" && e.range.columnStart==1 && e.value=="TRUE" ) {
    e.range.setValue('FALSE');
    switch(e.range.rowStart) {
      case 1:
        e.source.toast('function 1');
        break;
      case 2:
        e.source.toast('function 2');
    }
  }
  if(sh.getName()=="Your Sheet Name" && e.range.columnStart==2 && e.range.rowStart==1 && e.value) {
    switch(e.value) {
      case '1':
        e.source.toast('function 1');
        break;
      case '2':
        e.source.toast('function 2');
    }
    e.range.setValue('');
  }
}

Animation:

在此處輸入圖像描述

事件 Object

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM