Присваивание массиву в скрипте google

Это, вероятно, невежественная ошибка с моей стороны, но я пытаюсь присвоить разные значения из разных столбцов массиву, чтобы поместить его в мастер-лист. Я хотел бы, чтобы последний столбец был равен имени листа, откуда пришли данные, чтобы отследить его.

Я чувствую, что я близок, но когда я добираюсь до последнего столбца, который я хочу использовать в качестве имени листа, я получаю следующую ошибку: Не удается преобразовать массив в объект [][]. (строка 19, файл "combineTOmaster")

Это мой код до сих пор. Я знаю, что проблема в том, что другой столбец - это массив [[][]], а последний - массив [][], но я не знаю, как это исправить. Есть идеи?

function getColValues(label,sheetName) {

  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  var colIndex = getColumnIndex(label, sheetName);
  var numRows = ss.getLastRow() -1;
  if (colIndex > 0 ) { 
    var colValues = ss.getRange(2, colIndex, numRows, 1).getValues();
  } 
  else if (colIndex = "orginalsheet") { 
    var colValues = [];
    var array = [];
    for (var i = 0; i < numRows-1;i++) {
      array[i] = sheetName;
    }  
    colValues = array;
  }
      else {
    var colValues = [];
  }
  Logger.log(colValues);
  return colValues;
    }

Спасибо

Это действительно должно быть orgin? Вероятно, вы имели в виду origin, т.е. "originalsheet". Затем возникает проблема, связанная с тем, что вы используете = в качестве оператора условной проверки. Вы должны изучить основы языка: developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/…

tehhowch 09.03.2019 15:38

@tehhoch Да, ошибка новичка с = против ==. Эта страница — отличный ресурс.

Jerome Learman 10.03.2019 12:51
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
2
249
2

Ответы 2

Давайте сломаем вашу функцию -

// you're passing column header and sheet name, OK
function getColValues(label, sheetName) {
  // getting sheet, OK
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);

  // getting column index, OK
  var colIndex = getColumnIndex(label, sheetName);

  // getting number of rows to collect, OK
  var numRows = ss.getLastRow() - 1;

  // at this point, i assume, variable colIndex is a number, because it should be
  // if label column exists, colIndex will be greater than 0, OK
  if (colIndex > 0) {
    // get values of that column, OK
    var colValues = ss.getRange(2, colIndex, numRows, 1).getValues();
    // colValues will be like this, at this point-
    // [ [value], [value], [value] ... ]

  } else if ((colIndex = 'orginalsheet')) {
    // NOT OK, = sign assigns 'orginalsheet' to colIndex
    // do you wanna assign or compare?
    // to compare, use == sign
    // besides why are you assigning a string value to colIndex ?
    // colIndex should be a number, in my understanding

    // now, what do you wanna do here ?
    var colValues = [];
    var array = [];
    for (var i = 0; i < numRows - 1; i++) {
      array[i] = sheetName;
    }
    colValues = array;
    // at his point, colValues is -
    // [sheetName, sheetName, sheetName...]

    // is this correct colValues ?
    // i guess not
    // i think you're trying to use sheetName as a column value for every row
    // if that is the case, do this
    var colValues = [];
    for (var i = 0; i < numRows; i++) colValues.push([sheetName]);
    // now colValues is -
    // [ [sheetName], [sheetName], [sheetName].... ]
    // which you can insert in a sheet as values of a column
  } else {
    var colValues = [];
  }
  Logger.log(colValues);
  return colValues;
}

@ra89fi Большое спасибо. Вы ведете меня к ответу. Таким образом, ошибка 1 использовала =, а не ==. Вторая ошибка заключалась в использовании colIndex вместо лейбла. Ошибка номер три заключалась в том, что не использовался толчок. Есть ли хороший ресурс по толчку? Еще раз спасибо!!

Ниже приведен окончательный код, который работал у меня.

function getColValues(label,sheetName) {

  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  var colIndex = getColumnIndex(label, sheetName);
  var numRows = ss.getLastRow() -1;
  if (colIndex > 0 ) { 
    var colValues = ss.getRange(2, colIndex, numRows, 1).getValues();
  } 
  else if (label == "orginalsheet") { 
    var colValues = [];
    for (var i = 0; i < numRows;i++) {
      colValues.push([sheetName]);
    }  
  }
      else {
    var colValues = [];
  }
  return colValues; 
}

Другие вопросы по теме