Есть несколько причин, по которым ваш код не работает, например «Сегодня», но также в ваших массивах с вашим вызовом .getValues();
возвращаемый массив будет выглядеть примерно так: [["","Today",""]]
Вы не можетеиспользуйте Increment.setValues(------);
, поскольку increment
- это массив, а не объект диапазона.
Должен быть создан оператор if
if(-----){
} else if (-----) {
} else {
}
Этот код выполняет то, что вам требуется:
function Progressions() {
var workoutSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Workouts");
var range = workoutSheet.getRange(2, 1, 1, 3);
var increment = range.getValues();
var newRoutine;
var testValue = "Today";
if (increment[0][0] == testValue) {
newRoutine = [["", "Today", ""]];
} else if (increment[0][1] == testValue) {
newRoutine = [["", "", "Today"]];
} else if (increment[0][2] == testValue) {
newRoutine = [["Today", "", ""]];
}
range.setValues(newRoutine);
}
Альтернативная реализация цепочки if-else, которую проще расширять (например, если у вас было 365 различных тренировок в виде столбцов, вышеуказанному методу требуется 365 if
- else
проверок), за счет необходимости большегоЗнание JavaScript, чтобы понять, как это работает:
function Progressions() {
const workoutSheet = SpreadsheetApp.getActive().getSheetByName("Workouts"),
// 1 column per workout (here we have 3).
headerRange = workoutSheet.getRange(2, 1, 1, 3),
// Assume headers are in the range's first row.
headers = headerRange.getValues()[0],
newRoutine = [];
// Use Array#indexOf to do all the nasty "if-else if" checking.
const searchValue = "Today";
const columnIndex = headers.indexOf(searchValue);
if (columnIndex === -1)
throw new Error("'" + searchValue + "' not found in headers ('" + headerRange.getA1Notation() + "').");
// Set default header values (no Array#fill in Apps Script yet).
headers.forEach(function (s) { newRoutine.push(""); });
// Use addition and the modulus operator to increment and wrap.
const newIndex = (columnIndex + 1) % newRoutine.length;
newRoutine[newIndex] = searchValue;
// Write the new header values.
headerRange.setValues( [newRoutine] );
}