it-swarm.com.ru

Размещение флажков в Google Sheets с помощью скрипта Apps

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

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

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

5
Zyre Soriano

Я не уверен, когда они это сделали, но они добавили это сейчас. Используйте метод DataValidationBuilder's 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);
}
12
Andrew Miller

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

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

Значение ячейки должно быть TRUE/FALSE или в списке значений условия. Поддерживается проверка данных. Отображается как ячейка флажок. ...

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

Включить Sheets API v4 в расширенных службах Google

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

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

  • В редакторе сценариев
    • Ресурсы -> Проект облачной платформы
    • Просмотр 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 для создания флажка, я думаю, что можно использовать следующий пример сценария.

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

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

Рекомендации :

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

9
Tanaike

Флажок - это недавно добавленный критерий проверки данных. Интересно, что когда я пытаюсь вызвать метод 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);
3
Anton Dementiev

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

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

Объяснение

Служба электронных таблиц скриптов 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.

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

3
Rubén

Легко:

//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());
};

2
Tito
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");
      }
    }
2
Santos