Размещение флажков в Google Sheets с помощью скрипта Apps - PullRequest
0 голосов
/ 22 мая 2018

Я знаю, что этот флажок является относительно новой функцией в Google Sheets, поэтому я пытаюсь найти способ автоматического создания флажков в ячейках.

Пока что я не нашел ссылки на это в документации по скрипту Google Apps.

В настоящее время я делаю это вручную, но любые предложения с использованием скрипта будут высоко оценены.

Ответы [ 8 ]

0 голосов
/ 18 апреля 2019

ОБНОВЛЕНИЕ (апрель 2019)

Теперь вы можете напрямую insertCheckboxes (или removeCheckboxes) на Range или RangeList без каких-либообходные пути.Вы также можете изменить проверенное значение / непроверенное значение, используя альтернативные сигнатуры методов, найденные в документации.

Фрагмент:

SpreadsheetApp.getActive()
    .getRange('Sheet2!A2:A10')
    .insertCheckboxes();
0 голосов
/ 20 июля 2018

Я не уверен, когда они это сделали, но они добавили это сейчас.

Использовать метод класса DataValidationBuilder * requireCheckbox().Пример:

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);
}
0 голосов
/ 27 июля 2018

Легко:

//There are two ways, using Range or using current cell or sheet or similar 
//First is using current cell
function VoF() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getCurrentCell().offset(1, 0, 499, 1).setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
  .setHelpText('TRUE or FALSE')
  .requireCheckbox() //if you customize this is possible that you dont get the boxes and the verification data could fail,so keep them standar with TRUE and FALSE
  .build());
};

//Second is using Spreedsheet ranges

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('G1:G11').activate();
  spreadsheet.getRange('G1:G11').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(false)
  .requireCheckbox()
  .build());
};
0 голосов
/ 21 июня 2018

Вы хотите создать флажок в ячейках электронной таблицы, используя сценарии.Если мое понимание верно, как насчет этого обходного пути?К сожалению, в Class SpreadsheetApp пока нет методов для создания флажка.(Когда такие методы пытаются использовать, возникает ошибка.) Поэтому я хотел бы предложить создать его с использованием Sheets API.

Когда я увидел ConditionType из dataValidation, документаBOOLEAN говорит

Значение ячейки должно быть ИСТИНА / ЛОЖЬ или в списке значений условия.Поддерживается проверка данных. Отображает как ячейку флажок. ...

Из этого я мог понять, как создать флажок, используя Sheets API.Следующий скрипт является примером скрипта.Это создает 6 флажков для «A1: C3».При использовании этого сценария, пожалуйста, включите Sheets API в Advanced Services и консоли API следующим образом.

Включите Sheets API v4 в Advanced Google Services

  • В редакторе сценариев
    • Ресурсы -> Расширенные службы Google
    • Включить API Google Sheets v4

Включить API Sheets v4 на консоли API

  • В редакторе сценариев
    • Ресурсы -> Проект Cloud Platform
    • Просмотр консоли API
    • На начальном этапе нажмите Включить API и получите учетные данные, такие как ключи.
    • С левой стороны щелкните Библиотека.
    • В поле Поиск API и служб введите «листы».И нажмите Google Sheets API.
    • Нажмите кнопку Включить.
    • Если API уже включен, пожалуйста, не выключайте.

Если вы сейчас открываете редактор сценариев со сценарием для использования API Sheets, вы можете включить API Sheets для проекта, открыв этот URL-адрес https://console.cloud.google.com/apis/library/sheets.googleapis.com/

Пример сценария:

В этом примересценарий, флажки создаются для "A1: C3" Sheet1.Пожалуйста, используйте этот сценарий как сценарий с привязкой к контейнеру.

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());
Поток:
  1. dataValidation устанавливается с помощью repeatCell.
  2. boolValue устанавливается с помощью updateCells.

Результат:

enter image description here

Примечание:

  • Это простой пример сценария,Поэтому, пожалуйста, измените это для вашей среды.
  • Когда можно использовать методы Class SpreadsheetApp для создания флажка, я думаю, что можно использовать следующий пример сценария.
Scriptдля класса SpreadsheetApp

22 июня 2018 г. этот скрипт возвращает ошибку ошибки сервера.

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

Ссылки:

Если я неправильно понимаю ваш вопрос, извините.

0 голосов
/ 11 июня 2018
function onEdit() {
var cell = SpreadsheetApp.getActive().getRange('A1');
      var array =['☐','☑'];
    // var rule = SpreadsheetApp.newDataValidation().requireValueInList(['☐','☑']).build();
      var rule = SpreadsheetApp.newDataValidation().requireValueInList(array, false).build()
     cell.setDataValidation(rule);
     var valor = array[1];
     // Logger.log(valor);
      if(cell.getValue() == valor){
        cell.offset(0, 1).setValue("Aprobado");
      } else{
        cell.offset(0, 1).setValue("Reprobado");
      }
    }
0 голосов
/ 27 мая 2018

Краткий ответ

Добавьте флажок из пользовательского интерфейса Google Sheets, затем используйте один из методов copyTo Диапазон классов .

Объяснение

Служба электронных таблиц скриптов Google Apps не содержит методов для всего, что можно сделать с помощью пользовательского интерфейса Google Sheets.Это случай вставки> флажок, который является довольно новой функцией.

Даже функция записи макросов не может сделать это.Следующее было записано один момент назад

/** @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_DATA_VALIDATION.

Похожие вопросы по переполнению стека

0 голосов
/ 22 мая 2018

Я согласен, что вам нужно обойти эту проблему, чтобы создать флажок.Другой способ - создать выпадающий список.

function myFunction() {
 var cell = SpreadsheetApp.getActive().getRange('A1');
 var rule = SpreadsheetApp.newDataValidation().requireValueInList(['☐','☑']).build();
 cell.setDataValidation(rule);
}
0 голосов
/ 22 мая 2018

Флажок - это недавно добавленный критерий проверки данных.Интересно, что когда я пытаюсь вызвать метод getDataValidation () для диапазона, содержащего флажки, выдается следующее сообщение об ошибке:

var rule = range.getDataValidation();

К сожалению, произошла ошибка сервера.Пожалуйста, подождите немного и попробуйте снова.

Тем временем вы можете обойти это, установив один флажок где-нибудь на вашем листе и скопировав его Проверка данных в новый диапазон.Например, если «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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...