Dans cette fonction de feuille Google, une clé principale est automatiquement ajoutée à la première colonne de modification. Le problème avec cette fonction est le fait que lorsqu'une nouvelle ligne est ajoutée, la ligne ci-dessous reçoit également une clé primaire malgré les autres cellules de la rangée.
function myFunction() {
var AUTOINC_COLUMN = 0;
var HEADER_ROW_COUNT = 1;
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var worksheet = spreadsheet.getSheetByName("Sheet1");
var rows = worksheet.getDataRange().getNumRows();
var vals = worksheet.getSheetValues(1, 1, rows+1, 2);
for (var row = HEADER_ROW_COUNT; row < vals.length; row++) {
try {
var id = vals[row][AUTOINC_COLUMN];
Logger.log(id);Logger.log((""+id).length ===0);
if ((""+id).length === 0) {
// Here the columns & rows are 1-indexed
worksheet.getRange(row+1, AUTOINC_COLUMN+1).setValue(row);
}
} catch(ex) {
// Keep calm and carry on
}
}
}
3 Réponses :
Je n'utiliserais pas de script pour cela, entrez simplement cela dans A2, puis copiez tout le chemin. Mettez un 0 (ou 100, où que vous souhaitiez qu'il démarre) dans la cellule A1.
=if(B2="","",A1+1)
Quelque chose comme ça peut être ce que vous recherchez:
function auto_increment_col() { var AUTOINC_COLUMN = 1; var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var worksheet = spreadsheet.getActiveSheet(); var last_row = worksheet.getLastRow(); var last_inc_val = worksheet.getRange(last_row, AUTOINC_COLUMN).getValue(); //if auto_inc column is blank and the column next to auto_inc column is not blank, then assume its a new row var is_new_row = last_inc_val == "" && worksheet.getRange(last_row, AUTOINC_COLUMN+1).getValue() != ""; Logger.log("new_row:" + is_new_row + ", last_inc_val:" + last_inc_val ); if (is_new_row) { var prev_inc_val = worksheet.getRange(last_row-1, AUTOINC_COLUMN).getValue(); worksheet.getRange(last_row, AUTOINC_COLUMN).setValue(prev_inc_val+1); } }
Je pensais que j'ajouterais ma réponse. Je n'utiliserais pas de formule car cela se recalculerait si vous triez la feuille (pas bien si vous référencez des clés primaires ailleurs). L'autre solution basée sur le code suppose que les enregistrements ne seront ajoutés qu'à l'extrémité de la feuille et la dernière ligne est la clé primaire la plus élevée (c.-à-d. Se retrouvera avec des touches en double si vous avez déjà recours à la feuille).
Ce code sera Travailler, peu importe où vous insérez un enregistrement, ou comment vous triez les données. Il suppose que vous ne retirerez jamais la rangée avec la clé primaire la plus élevée (enlever une ligne avec moins de la clé primaire la plus élevée, ne sera pas un problème). P>
function auto_increment_column() { const AUTO_INCREMENT_SHEET = "Sheet1"; var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(AUTO_INCREMENT_SHEET); var nextIncrementValue = Math.max.apply(Math, sheet.getRange("A:A").getValues().flat().filter(e => !isNaN(parseFloat(e)))) var rows = sheet.getRange("A:B"); for(var i = 1; i <= rows.getNumRows(); i++) { var cellA = rows.getCell(i, 1); var cellB = rows.getCell(i, 2); if(cellA.getValue() === "" && cellB.getValue() !== "") { cellA.setValue(nextIncrementValue++); } } }
Votre problème n'est pas clair. Vous n'avez pas fourni suffisamment d'informations. Une clé principale est automatiquement ajoutée à la première colonne du changement i> Qu'est-ce que cela signifie? Vous ne dites pas non plus si vos données sont numériques ou texte. Il serait utile d'avoir une copie de votre feuille de calcul. Cependant, comme un coup de poignard dans l'obscurité, essayez ceci: ajoutez une variable après ID:
Var Col2 = Vals [rangée] [1]; code>, utilisez cette nouvelle ligne pour les évaluer
si ( id.length! = 0 && col2.length! = 0) { code>. Donc, si l'identifiant n'est pas vide et que le col2 n'est pas vide, vous pouvez ajouter la clé. Si l'une ou l'autre valeur est une chaîne, alors apportez un simple passage à
id.tostring (). longueur code>, etc.