Je sais que la case à cocher est une fonctionnalité relativement nouvelle dans Google Sheets. J'essaie donc de trouver un moyen de créer automatiquement des cases à cocher dans les cellules.
Jusqu'à présent, je n'ai trouvé aucune référence à ce sujet dans la documentation de Google Apps Script.
Actuellement, je le fais manuellement, mais toute suggestion utilisant un script sera très appréciée.
Je ne sais pas quand ils l'ont fait, mais ils l'ont ajouté maintenant. Utilisez la méthode requireCheckbox()
de la classe DataValidationBuilder
. Exemple:
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);
}
Vous souhaitez créer la case à cocher dans les cellules de la feuille de calcul à l'aide des scripts. Si ma compréhension est correcte, que diriez-vous de cette solution de contournement? Malheureusement, la classe SpreadsheetApp ne dispose pas encore de méthodes pour créer la case à cocher. (Lorsque de telles méthodes sont essayées, l'erreur se produit.) Je voudrais donc proposer de la créer à l'aide de l'API de feuille.
Quand j'ai vu ConditionType
de dataValidation
, le document de BOOLEAN dit
La valeur de la cellule doit être TRUE/FALSE ou dans la liste des valeurs de condition. Pris en charge par la validation des données. Rend sous forme de case à cocher de cellule. ...
Cela m'a permis de comprendre comment créer la case à cocher à l'aide de l'API Sheets. Le script suivant est un exemple de script. Cela crée 6 cases à cocher pour "A1: C3". Lorsque vous utilisez ce script, activez l'API Sheets dans Advanced Services de Google et la console API comme suit.
Si vous ouvrez maintenant l'éditeur de script avec le script d'utilisation de l'API Sheets, vous pouvez activer l'API Sheets pour le projet en accédant à cette URL https://console.cloud.google.com/apis/library/sheets.googleapis. com/
Dans cet exemple de script, les cases à cocher sont créées sous "A1: C3" de la feuille Sheet1. Veuillez utiliser ce script en tant que script lié au conteneur.
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
est défini à l'aide de repeatCell
.boolValue
est défini à l'aide de updateCells
.Le 22 juin 2018, ce script renvoie encore une erreur d'erreur du serveur.
var rule = SpreadsheetApp.newDataValidation().withCriteria(SpreadsheetApp.DataValidationCriteria.CHECKBOX, ["TRUE", "FALSE"]).build();
SpreadsheetApp.getActiveSheet().getRange("A1").setDataValidation(rule);
Si je comprends mal votre question, je suis désolé.
La case à cocher correspond au critère de validation des données récemment ajouté. Fait intéressant, lorsque j'essaie d'appeler la méthode 'getDataValidation ()' sur la plage contenant les cases à cocher, l'erreur suivante est générée:
var rule = range.getDataValidation();
Nous sommes désolés, une erreur de serveur s'est produite. S'il vous plaît attendez un peu et essayez à nouveau.
En attendant, vous pouvez contourner ce problème en cochant une case dans la feuille et en copiant sa validation des données dans la nouvelle plage. Par exemple, si "A1" est la cellule contenant la case à cocher et que la plage cible est constituée d'une seule colonne de 3 lignes:
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);
Ajoutez la case à cocher de l'interface utilisateur de Google Sheets, puis utilisez l'une des méthodes copyTo De Class Range .
Le service Tableur de scripts Google Apps n'inclut pas de méthode pour tout ce qui pourrait être fait via l'interface utilisateur de Google Sheets. C'est le cas de l'insertion> case à cocher qui est une fonctionnalité assez nouvelle.
Même la fonction macro Enregistrer ne peut pas faire cela. Ce qui suit a été enregistré il y a un moment
/** @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);
};
REMARQUE: Si vous ne souhaitez pas transmettre toutes les propriétés de la cellule (bordures, formules, arrière-plan, etc.) au lieu de SpreadsheetApp.CopyPasteType.PASTE_NORMAL
, utilisez SpreadsheetApp.CopyPasteType.PASTE_DATA_VALIDATION
.
Q sur le dépassement de pile
Facile:
//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());
};
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");
}
}