簡體   English   中英

使用谷歌應用腳本在谷歌工作表中自動勾選復選框

[英]Automatic ticking checkbox in google sheet using google app script

在此處輸入圖像描述

我有一個問題如下。 首先:分別在 A 列的假期中,我為訂單列表表着色。

第二:在假期的F行(在A列),復選框中沒有勾選我試過但沒有成功這是我的代碼

function checkbox() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Sheet1');
  if (sheet.getRange('C2').getValue() =='6/2/2021'||sheet.getRange('C2').getValue() 
     =='7/2/2021') {
                     sheet.getRange('C9').setValue('FALSE');
}   else {
            sheet.getRange('C9').setValue('FALSE');
         }
}

如果日期是假期,您可以使用onEdit(e)簡單觸發器取消選中該復選框。


先決條件:

  • 確保您的 Google 表格時區和您的腳本時區相同。

檢查您的共享文檔后,您的 Google 表格時區設置為 Tokyo(+09:00) 但您的腳本時區設置為America/Los_Angeles

要更新您的腳本時區:

  1. 在左側,點擊Project Settings setting
  2. Select Show "appsscript.json" manifest file in editor復選框。
  3. 將您的appsscript.json文件中的 timeZone 屬性更改為"timeZone": "Asia/Tokyo"

示例代碼:

function onEdit(e){

  var ss = e.source
  var sheetName = '注文記入表';
  var sheet = ss.getActiveSheet();
  var cell = e.range;

  Logger.log(cell.isChecked());
  //Check if modified cell is a checkbox and if it in sheet 注文記入表
  if(sheet.getName()==sheetName && cell.isChecked() != null){

    //Get Holidays
    var holidays = sheet.getRange('A1:A').getDisplayValues().flat().filter(String);

    //Get date value
    var dateVal = sheet.getRange(4,cell.getColumn()).getValue();
    Logger.log(dateVal);
    var dateStr = Utilities.formatDate(new Date(dateVal),Session.getScriptTimeZone(),"dd/MM/yyyy");
    Logger.log(dateStr);

    //If current date is a holiday, uncheck the checkbox
    Logger.log(holidays.includes(dateStr));
    if(holidays.includes(dateStr)){
      cell.uncheck();
    }
  }

}

它能做什么?

  1. 分別使用事件對象e.sourcee.range獲取電子表格object 和范圍object。
  2. 使用range.isChecked()檢查修改后的單元格是否在工作表“注文記入表”中,是否為復選框

range.isChecked()

返回范圍內的所有單元格是否將其復選框 state 設置為“已選中”。 如果選中了某些單元格並且未選中 rest,或者如果某些單元格沒有復選框數據驗證,則返回 null。

  1. 如果修改后的單元格是一個復選框,則在 A 列中獲取假期列表。 range.getDisplayValues()返回一個二維字符串值數組,使用Array.prototype.flat()將其更改為一維字符串數組價值觀。 然后使用Array.prototype.filter()刪除空單元格值。

  2. 使用range.getValue()獲取復選框的日期。 由於您的假期日期列表采用DD/MM/YYYY格式,因此請使用Utilities.formatDate(date, timeZone, format)以這種格式轉換日期值

  3. 使用Array.prototype.includes()檢查步驟 4 中的轉換日期是否列在您的假期數組列表中。 如果在假期數組列表中找到它,請使用range.uncheck()取消選中該復選框


筆記:

  • 您無法在腳本編輯器中手動調試/運行此 onEdit()。 如果您想對此進行測試,您需要在代碼中包含日志,編輯工作表中的單元格並檢查執行選項卡中的日志。

暫無
暫無

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

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