it-swarm.com.de

Platzieren von Kontrollkästchen in Google Sheets mithilfe von Apps Script

Ich weiß, dass das Kontrollkästchen ein relativ neues Feature in Google Sheets ist. Ich versuche daher, einen Weg zu finden, Kontrollkästchen in Zellen automatisch zu erstellen. 

Bisher habe ich in der Dokumentation zu Google Apps Script keinen entsprechenden Hinweis gefunden. 

Momentan mache ich es manuell, aber jeder Vorschlag mit Skript wird sehr geschätzt.

5
Zyre Soriano

Ich bin mir nicht sicher, wann sie es getan haben, aber sie haben dies jetzt hinzugefügt. Verwenden Sie die requireCheckbox()-Methode der Klasse DataValidationBuilder. Beispiel:

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

Sie möchten das Kontrollkästchen in den Zellen der Kalkulationstabelle mithilfe der Skripts erstellen. Wenn mein Verständnis richtig ist, wie wäre es mit dieser Problemumgehung? Leider hat die Klasse SpreadsheetApp noch keine Methoden zum Erstellen des Kontrollkästchens. (Wenn versucht wird, solche Methoden anzuwenden, tritt der Fehler auf.) Daher möchte ich vorschlagen, sie mithilfe der Sheets-API zu erstellen.

Als ich ConditionType von dataValidation sah, sagt das Dokument von BOOLEAN

Der Wert der Zelle muss TRUE/FALSE oder in der Liste der Bedingungswerte sein. Unterstützt durch Datenvalidierung. Rendert als Zellen-Kontrollkästchen. ...

Daraus konnte ich verstehen, wie man das Kontrollkästchen mithilfe der Sheets-API erstellt. Das folgende Skript ist ein Beispielskript. Dadurch werden 6 Kontrollkästchen für "A1: C3" erstellt. Wenn Sie dieses Skript verwenden, aktivieren Sie bitte Sheets API unter Advanced Google Services und API-Konsole wie folgt.

Aktivieren Sie Sheets API v4 in den erweiterten Google Services

  • Im Skripteditor
    • Ressourcen -> Erweiterte Google-Services
    • Aktivieren Sie Google Sheets API v4

Aktivieren Sie Sheets API v4 in der API-Konsole

  • Im Skripteditor
    • Ressourcen -> Cloud-Plattform-Projekt
    • API-Konsole anzeigen
    • Klicken Sie unter "Erste Schritte" auf "APIs aktivieren" und erhalten Sie Anmeldeinformationen wie Schlüssel.
    • Klicken Sie auf der linken Seite auf Bibliothek.
    • Bei Suche nach APIs & Services geben Sie "Arbeitsblätter" ein. Klicken Sie auf Google Sheets API.
    • Klicken Sie auf die Schaltfläche Aktivieren.
    • Wenn die API bereits aktiviert wurde, deaktivieren Sie sie bitte nicht.

Wenn Sie jetzt den Skripteditor mit dem Skript zur Verwendung der Sheets-API öffnen, können Sie die Sheets-API für das Projekt aktivieren, indem Sie auf diese URL https://console.cloud.google.com/apis/library/sheets.googleapis zugreifen. com/

Beispielskript:

In diesem Beispielskript werden die Kontrollkästchen mit "A1: C3" von Sheet1 erstellt. Bitte verwenden Sie dieses Skript als Container-gebundenes Skript.

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 wird mit repeatCell eingestellt.
  2. boolValue wird mit updateCells eingestellt.

Ergebnis:

 enter image description here

Hinweis :

  • Dies ist ein einfaches Beispielskript. Bitte ändern Sie dies für Ihre Umgebung.
  • Wenn die Methoden der Class SpreadsheetApp zum Erstellen der Checkbox verwendet werden können, denke ich, dass das folgende Beispielskript möglicherweise verwendet werden kann.

Am 22. Juni 2018 gibt dieses Skript noch einen Fehler des Serverfehlers zurück.

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

Verweise :

Wenn ich Ihre Frage falsch verstanden habe, tut es mir leid.

9
Tanaike

UPDATE (April 2019)

Sie können jetzt direkt insertCheckboxes (oder removeCheckboxes) auf ein Range oder RangeList ohne ein Problemumgehungen. Sie können den geprüften/nicht geprüften Wert auch mit alternativen Methodensignaturen ändern, die in der Dokumentation zu finden sind.

Snippet:

SpreadsheetApp.getActive()
    .getRange('Sheet2!A2:A10')
    .insertCheckboxes();
4
TheMaster

Das Kontrollkästchen ist das kürzlich hinzugefügte Datenvalidierungskriterium. Wenn ich versuche, die Methode 'getDataValidation ()' für den Bereich aufzurufen, der Kontrollkästchen enthält, wird interessanterweise der folgende Fehler ausgegeben:

var rule = range.getDataValidation();

Leider ist ein Serverfehler aufgetreten. Bitte warten Sie einen Moment und versuchen Sie es erneut.

In der Zwischenzeit können Sie dies umgehen, indem Sie ein einzelnes Kontrollkästchen in Ihrem Arbeitsblatt platzieren und die Datenüberprüfung in den neuen Bereich kopieren. Wenn beispielsweise "A1" die Zelle ist, die das Kontrollkästchen enthält, und der Zielbereich aus einer einzelnen Spalte mit 3 Zeilen besteht:

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

Kurze Antwort

Fügen Sie das Kontrollkästchen über die Google Sheets-Benutzeroberfläche hinzu, und verwenden Sie dann eine der copyTo -Methoden von Class Range .

Erläuterung

Der Google Apps Script Spreadsheet-Dienst enthält keine Methoden für alles, was über die Google Sheets-Benutzeroberfläche ausgeführt werden kann. Dies ist der Fall beim Einfügen> Kontrollkästchen, das eine ziemlich neue Funktion ist.

Sogar die Record-Makro-Funktion kann das nicht. Das Folgende wurde vor einem Moment aufgenommen

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

HINWEIS: Wenn Sie nicht alle Zelleneigenschaften (Rahmen, Formeln, Hintergrund usw.) anstelle von SpreadsheetApp.CopyPasteType.PASTE_NORMAL übergeben möchten, verwenden Sie SpreadsheetApp.CopyPasteType.PASTE_DATA_VALIDATION.

Verwandte Fragen zu Stack Overflow

3
Rubén

Einfach:

//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