使用Apps脚本在Google表格中放置复选框

Zyr*_*ano 10 checkbox google-sheets google-apps-script

我知道复选框是Google表格中相对较新的功能,所以我试图找到一种在单元格中自动创建复选框的方法.

到目前为止,我还没有在Google Apps脚本文档中找到有关此内容的参考.

目前我手动完成,但任何使用脚本的建议将非常感激.

And*_*ler 17

我不确定他们什么时候做到了,但他们现在已经添加了这个.使用类DataValidationBuilderrequireCheckbox()方法.例:

function setCheckboxes() {
  // Assumes there's only one sheet
  var sheet = SpreadsheetApp.getActiveSheet();

  // This represents ALL the data
  var dataRange = sheet.getDataRange();

  /* Get checkbox range from sheet data range. Assumes checkboxes are on the
  left-most column
  */
  var dataRangeRow = dataRange.getRow();
  var dataRangeColumn = dataRange.getColumn();
  var dataRangeLastRow = dataRange.getLastRow();
  var checkboxRange = sheet.getRange(
    dataRangeRow,
    dataRangeColumn,
    dataRangeLastRow
  );

  var enforceCheckbox = SpreadsheetApp.newDataValidation();
  enforceCheckbox.requireCheckbox();
  enforceCheckbox.setAllowInvalid(false);
  enforceCheckbox.build();

  checkboxRange.setDataValidation(enforceCheckbox);
}
Run Code Online (Sandbox Code Playgroud)


Tan*_*ike 11

您想使用脚本在电子表格的单元格中创建复选框.如果我的理解是正确的,那么这个变通方法呢?不幸的是,Class SpreadsheetApp还没有创建复选框的方法.(当尝试使用此类方法时,会发生错误.)因此,我建议使用Sheets API创建它.

当我看到ConditionTypedataValidation,BOOLEAN的文件

单元格的值必须为TRUE/FALSE或条件值列表.由数据验证支持.呈现为单元格复选框....

从这里,我可以理解如何使用Sheets API创建复选框.以下脚本是示例脚本.这将为"A1:C3"创建6个复选框.使用此脚本时,请按照以下步骤在Advanced Google Services和API控制台中启用Sheets API.

在Advanced Google Services上启用Sheets API v4

  • 在脚本编辑器上
    • 资源 - >高级Google服务
    • 启用Google表格API v4

在API控制台上启用Sheets API v4

  • 在脚本编辑器上
    • 资源 - >云平台项目
    • 查看API控制台
    • 在"入门"中,单击"启用API"并获取密钥等凭据.
    • 在左侧,单击"库".
    • 在搜索API和服务时,输入"工作表".然后点击Google表格API.
    • 单击启用按钮.
    • 如果已启用API,请不要关闭.

如果您现在使用使用Sheets API的脚本打开脚本编辑器,则可以通过访问此URL为项目启用Sheets API :https://console.cloud.google.com/apis/library/sheets.googleapis.com/

示例脚本:

在此示例脚本中,复选框创建为Sheet1的"A1:C3".请使用此脚本作为容器绑定脚本.

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetId = ss.getSheetByName("Sheet1").getSheetId();
var resource = {"requests": [
  {
    "repeatCell": {
      "cell": {"dataValidation": {"condition": {"type": "BOOLEAN"}}},
      "range": {"sheetId": sheetId, "startRowIndex": 0, "endRowIndex": 3, "startColumnIndex": 0, "endColumnIndex": 3},
      "fields": "dataValidation"
    }
  },
  {
    "updateCells": {
      "rows": [
        {"values": [{"userEnteredValue": {"boolValue": true}}, {"userEnteredValue": {"boolValue": false}}, {"userEnteredValue": {"boolValue": false}}]},
        {"values": [{"userEnteredValue": {"boolValue": true}}, {"userEnteredValue": {"boolValue": true}}, {"userEnteredValue": {"boolValue": false}}]},
        {"values": [{"userEnteredValue": {"boolValue": true}}, {"userEnteredValue": {"boolValue": true}}, {"userEnteredValue": {"boolValue": true}}]}
      ],
      "start": {"rowIndex": 0, "columnIndex": 0, "sheetId": sheetId},
      "fields": "userEnteredValue"
    }
  }
]};
Sheets.Spreadsheets.batchUpdate(resource, ss.getId());
Run Code Online (Sandbox Code Playgroud) 流 :
  1. dataValidation设置使用repeatCell.
  2. boolValue设置使用updateCells.

结果:

在此输入图像描述

注意 :

  • 这是一个简单的示例脚本.所以请根据您的环境进行修改.
  • 当可以使用Class SpreadsheetApp创建复选框的方法时,我认为可以使用以下示例脚本.
Class SpreadsheetApp的脚本

在2018年6月22日,此脚本返回服务器错误的错误.

var rule = SpreadsheetApp.newDataValidation().withCriteria(SpreadsheetApp.DataValidationCriteria.CHECKBOX, ["TRUE", "FALSE"]).build();
SpreadsheetApp.getActiveSheet().getRange("A1").setDataValidation(rule);
Run Code Online (Sandbox Code Playgroud)

参考文献:

如果我误解你的问题,我很抱歉.

  • 关于SpreadsheetApp类的脚本,请使用未记录的方法“ requireCheckbox”代替“ withCriteria”。参见[answer](/sf/answers/3600347201/) (2认同)

The*_*ter 7

更新(2019年4月)

现在,您可以直接insertCheckboxes(或removeCheckboxes)使用RangeRangeList不使用任何解决方法。您还可以使用文档中提供的替代方法签名来更改检查值/未检查值。

片段:

SpreadsheetApp.getActive()
    .getRange('Sheet2!A2:A10')
    .insertCheckboxes();
Run Code Online (Sandbox Code Playgroud)


Ant*_*iev 4

该复选框是最近添加的数据验证标准。有趣的是,当我尝试在包含复选框的范围上调用“getDataValidation()”方法时,会引发以下错误:

var rule = range.getDataValidation();
Run Code Online (Sandbox Code Playgroud)

很抱歉,服务器发生错误。请稍等一下,然后重试。

同时,您可以通过在工作表中的某个位置放置一个复选框并将其数据验证复制到新范围来解决此问题。例如,如果“A1”是包含复选框的单元格,并且目标范围由 3 行的单列组成:

var range = sheet.getRange("A1"); //checkbox template cell
var targetRange = sheet.getRange(rowIdex, colIndex, numOfRows, numOfCols);
range.copyTo(col, SpreadsheetApp.CopyPasteType.PASTE_DATA_VALIDATION);
var values = [["true"], ["false"], ["false"]];
targetRange.setValues(values);
Run Code Online (Sandbox Code Playgroud)