Как извлечь столбец из 2D-массива в Google Script - PullRequest
1 голос
/ 13 февраля 2020

Я новичок в ГАЗЕ. Я построил трехмерный массив, и я хотел бы извлечь n-й столбец как вектор. В этом примере двумерный массив называется «skillarray»:

var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("RV Partners");
var wsInfosPartners = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Infos Partners");
var skillsarray = wsInfosPartners.getRange(1, 1, 1, wsInfosPartners.getLastColumn()).getValues();

Затем, при вводе значения в ячейку моего листа, я хотел бы проверить, является ли это значение частью моей 1-й строки в массив. Если да, я бы хотел сохранить соответствующий столбец в новом векторе:

function onEdit (event) {
  var celluleactive = event.range;
  var valeur = celluleactive.getValue();
  var ligne = celluleactive.getRow();
  var colonne = celluleactive.getColumn();
  var nomws = celluleactive.getSheet().getName();

  var n = skillsvector.indexOf(valeur);

, поэтому здесь, в «n», в моем массиве должен быть номер строки, соответствующий значению, которое я ввел вручную » событие". Какой будет синтаксис для определения нового массива в качестве n-го столбца моего начального массива?

Дайте мне знать, если мне неясно, спасибо!

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Спасибо большое зиганощке за помощь! Позвольте мне опубликовать мой полный код, если кто-то сталкивается с такими же трудностями:

var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
var wsInfos = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
var skillsarray = wsInfosPartners.getRange(1, 1, wsInfos.getLastRow(), wsInfos.getLastColumn()).getValues();
var skillsvector = skillsarray[0];
var nbofskills = skillsvector.length;



function onEdit (e) {
  var ActiveCell = e.range;
  var val = ActiveCell.getValue();
  var row = ActiveCell.getRow();
  var col = ActiveCell.getColumn();
  var wsname = ActiveCell.getSheet().getName();
  var n = skillsvector.indexOf(val);
  var skillslist = skillsarray.map(function(column){
    return column[n];
  });

  if (wsname == "Sheet1" && col === 2 && row > 1) 
  {
  var listcell = ws.getRange(row, 3); 
  ShowSkillsList(skillslist,listcell);   
   } 

}

function ShowSkillsList(skillslist, cell){


  var rule = SpreadsheetApp
  .newDataValidation()
  .requireValueInList(skillslist)
  .setAllowInvalid(true)
  .build();

cell.setDataValidation(rule);

}
0 голосов
/ 13 февраля 2020
  1. , чтобы проверить, является ли это значение частью моей 1-й строки

Вам необходимо определить skillsvector как:

var skillsvector = skillsarray[0];

чтобы получить доступ к первой строке вашего массива

для определения нового массива в качестве n-го столбца моего исходного массива
  • n возвращает позицию столбца в массиве строк
  • чтобы создать новый массив, содержащий только значения ячеек столбца n, необходимо уменьшить массив диапазона 2D-значений с синтаксисом [строка [столбец]] до вертикального 1D-единицы
  • Один из нескольких способов сделать это - отображение

Образец:

  var newArray = values.map(function(column){ 
    return column[n];
});
  • Другая возможность - использовать al oop

Образец:

var newArray = [] ;
for (var i = 0; i < values.length; i++) {
    newArray.push(values[i][n]);
}

...