Как извлечь указанный столбец c из листов Google с помощью Google Script? - PullRequest
2 голосов
/ 17 января 2020

Итак, у меня есть таблица инвентаря еды, которая заполняется формой Google. Сотрудники подсчитывают количество приемов пищи в конце дня каждую ночь, и каждая 2-я ячейка каждого столбца имеет заголовок: «Начальный, понедельник, вторник». Я хотел бы уведомить себя, когда некоторые предметы продаются с высокой скоростью, чтобы их можно было пополнять. Моя проблема в том, что я могу легко получить данные за последнюю ночь, используя

.getLastColumn ();

, но я хочу основывать все данные lastColumn из самого последнего столбца, который имеет «Initial» во второй ячейке столбца и поместите их в массив из 2 столбцов на отдельном листе. Любые идеи? пока это мой сценарий;

function activeData() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var Sheet = ss.getSheetByName("IREmaildata");
  var lastCol = Sheet.getLastColumn();
  
        var rangeInitial = Sheet.getDataRange(); // Not sure if this would be correct?
        var initial = rangeInitial.getValues();
        var int = "Initial";               //the 3rd cell in "Initial" column must say "Initial".
             
         var rangeLastnight = Sheet.getRange(1,lastCol,37,1); //I can easily get the data from the most recent googleForm submission.
         var lastNight = rangeLastnight.getValues();          //I can easily get the data from the most recent googleForm submission.
       /*
         probably some type of logic will go here?
         
       */  
         ss.getSheetByName("Sheet5").getRange(1,2,37,1).setValues(yesterday);
         ss.getSheetByName("Sheet5").getRange(1,3,37,1).setValues(today);
 
  }

Моя электронная таблица; https://docs.google.com/spreadsheets/d/1X_UcqyXXRMyjZ2j46TymMrIMWvt19HOZTTaEUlIVqwE/edit?usp=sharing

1 Ответ

1 голос
/ 18 января 2020
  • В вашей общей электронной таблице листы IREmaildata и Sheet5 представляют собой ожидаемый ввод и вывод соответственно.
  • Из вашей общей электронной таблицы вы хотите получить значения из лист IREmaildata.
    • Вы хотите получить последний столбец (Most recent Night Dynamic Column) и получить столбец (Begining of the week Dynamic Column), который имеет Initial во 2-й строке и ближайший к последнему столбцу. И столбец «A».
    • И вы хотите поместить вычисленные значения в новый столбец (Precenatage sold Static Column).
    • Для вашей общей электронной таблицы вы хотите получить столбец «A», «V», «Y» и вычисленные значения для другого листа в электронной таблице.
  • Вы хотите добиться этого с помощью скрипта Google Apps.

Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Поток:

Последовательность действий этого примера сценария выглядит следующим образом.

  1. Получите значения из диапазон данных листа IREmaildata.
  2. Извлечь индекс последнего столбца из значений.
  3. Извлечь индекс столбца, который имеет значение Initial в строке 2 .
  4. Извлечь столбец «А», индекс столбца которого имеет значение Initial в строке 2, индекс последнего столбца.
  5. Рассчитать процент и поставить значение в массив для помещения в электронную таблицу.
  6. Поместите значения результатов в электронную таблицу.

Пример сценария:

Скопируйте и вставьте следующий сценарий в связанный с контейнером скрипт общей таблицы. И, пожалуйста, подготовьте лист назначения и установите имя листа назначения на destSheetName, и запустите функцию activeData.

function activeData() {
  var destSheetName = "###";  // Please set the destination sheet name.

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("IREmaildata");
  var values = sheet.getDataRange().getValues();
  var lastColumnIndex = values[1].length - 1;
  var initialIndex = 0;
  for (var i = lastColumnIndex - 1; i >= 0; i--) {
    if (values[1][i] == "Initial") {
      initialIndex = i;
      break;
    }
  }
  var result = values.map(function(row, i) {
    var ar = [row[0], row[initialIndex], row[lastColumnIndex]];
    if (i == 0) {
      ar.push("");
    } else if (i == 1) {
      ar.push("Since Begining of week");
    } else if (i > 1) {
      var temp = 1 - (row[lastColumnIndex] / row[initialIndex]);
      ar.push(isNaN(temp) ? "None sold" : temp);
    }
    return ar;
  });
  var destSheet = ss.getSheetByName(destSheetName);
  destSheet.getRange("D3:D").setNumberFormat("0.00%");
  destSheet.getRange(1, 1, result.length, result[0].length).setValues(result);
}

Примечание:

  • В приведенном выше сценарии, getValues() используется для извлечения значений из листа IREmaildata. В этом случае значения даты извлекаются как объект даты. Например, если вы хотите исправить формат даты, измените var values = sheet.getDataRange().getValues(); на var values = sheet.getDataRange().getDisplayValues();.

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...