这应该是一个非常简单的脚本,可以在3列之间更改列的标题。我让它工作一次,但是现在出现了一个我不明白的错误:


  ReferenceError:未定义“今天”。 (第10行,文件“代码”)


代码如下:

function Progressions() {
  var workoutSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Workouts");

  var Increment = workoutSheet.getRange(2, 1, 1, 3).getValues();
  var newRoutine =[[]]

  if (Increment == [[Today,,]]){
    var newRoutine = [[ ,Today, ]]
    Increment.setValues(newRoutine);
  } else {
    if (Increment == [[,Today,]]){
      var newToday = [[,,Today]]
      Increment.setValues(newRoutine);
    } else {
      if (Increment == [[,,Today]]){
        var newToday = [[Today,,]]
        Increment.setValues(newRoutine);
      }
    }
  }


显然,今天并没有定义,因为那仅仅是数组的内容。
我认为此脚本应该只更改newToday数组的内容,然后将其输入todayIncrement范围。

有什么想法可以消除此错误并实现目标吗?

最佳答案

有几种原因导致代码无法正常运行,例如“ Today”,但在调用.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] );
}

关于javascript - 阵列项目上的ReferenceError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50560569/

10-11 17:37