Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Checkbox 使用应用程序脚本在Google工作表中放置复选框_Checkbox_Google Apps Script_Google Sheets - Fatal编程技术网

Checkbox 使用应用程序脚本在Google工作表中放置复选框

Checkbox 使用应用程序脚本在Google工作表中放置复选框,checkbox,google-apps-script,google-sheets,Checkbox,Google Apps Script,Google Sheets,我知道复选框是Google Sheets中一个相对较新的功能,所以我正试图找到一种在单元格中自动创建复选框的方法 到目前为止,我还没有在谷歌应用程序脚本文档中找到与此相关的参考资料 目前我正在手动执行此操作,但任何使用脚本的建议都将非常感谢。复选框是最近添加的数据验证标准。有趣的是,当我试图在包含复选框的范围内调用“getDataValidation()”方法时,会引发以下错误: var rule = range.getDataValidation(); 很抱歉,发生了服务器错误。请稍等,然后

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

到目前为止,我还没有在谷歌应用程序脚本文档中找到与此相关的参考资料


目前我正在手动执行此操作,但任何使用脚本的建议都将非常感谢。

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

var rule = range.getDataValidation();
很抱歉,发生了服务器错误。请稍等,然后重试

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

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);

我同意您必须解决创建复选框的问题。另一种方法可能是创建一个下拉列表

function myFunction() {
 var cell = SpreadsheetApp.getActive().getRange('A1');
 var rule = SpreadsheetApp.newDataValidation().requireValueInList(['☐','☑']).build();
 cell.setDataValidation(rule);
}
简短回答 从GoogleSheets用户界面添加复选框,然后使用其中一个copyTo 方法

解释 GoogleApps脚本电子表格服务不包括通过GoogleSheets用户界面可以完成的所有操作的方法。这就是插入>复选框的情况,这是一个非常新的特性

即使是录制宏功能也无法做到这一点。以下是一分钟前录制的

/** @OnlyCurrentDoc */

function InsertCheckbox() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('A1').activate();
  /*
   * Added to show the missing Insert > Checkbox step
   */
  spreadsheet.getRange('B1').activate();
  spreadsheet.getRange('A1').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
};
注意:如果不想传递所有单元格属性(边框、公式、背景等),而不是
SpreadsheetApp.CopyPasteType.PASTE_NORMAL
请使用
SpreadsheetApp.CopyPasteType.PASTE_数据验证

堆栈溢出的相关Q


您希望使用脚本在电子表格的单元格中创建复选框。如果我的理解正确,该解决方法如何?不幸的是,类SpreadsheetApp还没有创建复选框的方法。(尝试使用此类方法时,会发生错误。)所以我想建议使用Sheets API创建它

当我看到
dataValidation
ConditionType

单元格的值必须为真/假或在条件值列表中。由数据验证支持。作为单元格复选框呈现。

由此,我可以理解如何使用Sheets API创建复选框。以下脚本是一个示例脚本。这将创建6个“A1:C3”复选框。使用此脚本时,请在高级Google服务和API控制台启用Sheets API,如下所示

在高级Google服务中启用API v4
  • 关于脚本编辑器
    • 资源->高级谷歌服务
    • 打开GoogleSheetsAPI v4
  • 关于脚本编辑器
    • 资源->云平台项目
    • 查看API控制台
    • 开始时,单击启用API并获取密钥等凭据
    • 在左侧,单击“库”
    • 在搜索API和服务时,输入“sheets”,然后单击Google sheets API
    • 单击启用按钮
    • 如果API已经启用,请不要关闭
如果现在使用“使用工作表API的脚本”打开脚本编辑器,则可以通过访问此URL为项目启用工作表API

示例脚本: 在此示例脚本中,复选框创建为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());
流量:
  • dataValidation
    是使用
    repeatCell
    设置的
  • boolValue
    是使用
    updateCells
    设置的
  • 结果:

    注:
    • 这是一个简单的示例脚本。请根据您的环境修改此脚本
    • 当可以使用用于创建复选框的SpreadsheetApp类的方法时,我认为可以使用以下示例脚本
    类SpreadsheetApp的脚本 2018年6月22日,此脚本返回服务器错误的错误

    var rule = SpreadsheetApp.newDataValidation().withCriteria(SpreadsheetApp.DataValidationCriteria.CHECKBOX, ["TRUE", "FALSE"]).build();
    SpreadsheetApp.getActiveSheet().getRange("A1").setDataValidation(rule);
    
    参考资料:

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

    我不确定他们是什么时候做的,但他们现在已经添加了这个

    使用class
    DataValidationBuilder
    的方法。示例:

    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);
    }
    
    简单:

    //有两种方法,一种是使用范围,另一种是使用当前单元格或工作表或类似内容
    //首先是使用当前单元格
    函数VoF(){
    var电子表格=SpreadsheetApp.getActive();
    电子表格.getCurrentCell().offset(1,0499,1).setDataValidation(SpreadsheetApp.newDataValidation())
    .setAllowInvalid(true)
    .setHelpText('TRUE或FALSE')
    .requireCheckbox()//如果您进行自定义,则可能无法获取框,验证数据可能会失败,因此请使用TRUE和FALSE保持它们的标准
    .build());
    };
    //第二种是使用Spreedsheet范围
    函数myFunction(){
    var电子表格=SpreadsheetApp.getActive();
    电子表格.getRange('G1:G11').activate();
    电子表格.getRange('G1:G11').setDataValidation(SpreadsheetApp.newDataValidation()
    .setAllowInvalid(false)
    .box()
    .build());
    };
    更新(2019年4月) 现在,您可以直接
    在上插入复选框
    (或
    删除复选框
    ),也可以不使用任何解决方法。您还可以使用文档中的替代方法签名更改选中值/未选中值

    片段:
    关于类SpreadsheetApp的脚本,不要使用带有条件的
    使用未记录的方法
    requireCheckbox
    。看,这基本上与此相同,你知道什么…简单到
    。移除复选框()
    @DanCue以清除,
    范围。取消选中()
    。如果你使用官方文档中的“在页面中查找”。哈哈。我就是这么做的。另外,我想说的是删除复选框。谢谢
    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);
    }
    
    SpreadsheetApp.getActive()
        .getRange('Sheet2!A2:A10')
        .insertCheckboxes();