Скрипт для переноса данных в список - PullRequest
0 голосов
/ 07 марта 2020

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

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

  1. Он помещает дату в таблицу вниз, а не только в строки с другими данными.
  2. Мне нужно будет повторить этот процесс, и я довольно незнаком с процессом "lastRow".

Пример листа: https://docs.google.com/spreadsheets/d/1irdT53jwiiJ56eMy33Kw7V51_Q2Nh0SCtdyoQfibSRE/edit?usp=sharing

Текущий код:



  var StockSheet = SpreadsheetApp.getActive().getSheetByName('Stock');
  var TransferSheet = SpreadsheetApp.getActive().getSheetByName('Transfers');

  var HTTransfer = StockSheet.getRange('B4:D');
  var CBTransfer = StockSheet.getRange('B4:E');
  var WBTransfer = StockSheet.getRange('B4:F');

  var Transfers = TransferSheet.getRange('B3:E');
  var ItemCol = TransferSheet.getRange('B3:B');
  var QuantityCol = TransferSheet.getRange('C3:C');
  var StoreCol = TransferSheet.getRange('D3:D');
  var DateCol = TransferSheet.getRange('E3:E');
  var SSItemCol = StockSheet.getRange('B4:B');
  var HTQCol = StockSheet.getRange('D4:D');
  var CBQCol = StockSheet.getRange('E4:E');
  var WBQCol = StockSheet.getRange('F4:F');

  var TransVal = Transfers.getValues();
  var ItemColVal = ItemCol.getValues();
  var QuantityVal = QuantityCol.getValues();
  var StoreVal = StoreCol.getValues();

  var SSItemVal = SSItemCol.getValues();

  var HTQVal = HTQCol.getValues();
  var CBQVal = CBQCol.getValues();
  var WBQVal = WBQCol.getValues();

  var today = new Date();

  for (var row in TransVal) {

    var todayData = today[row];

    var TransData = TransVal[row][0];
    var ItemColData = ItemColVal[row][0];
    var QuantityData = QuantityVal[row][0];
    var StoreData = StoreVal[row][0];

    var ItemData = SSItemVal[row];

    var HTQData = HTQVal[row];
    var CBQData = CBQVal[row];
    var WBQData = WBQVal[row];



  if (HTQData > 0) {

    ItemColVal[row][0] = ItemData;

    QuantityVal[row][0] = HTQData;

    StoreVal[row][0] = "Hagerstown";
    DateCol[row] = todayData;





  }}

  ItemCol.setValues(ItemColVal);
  QuantityCol.setValues(QuantityVal);
  StoreCol.setValues(StoreVal);
  DateCol.setValue(today);
}

1 Ответ

0 голосов
/ 10 марта 2020

Как сказал @Cooper, использование диапазонов с нотацией A1 может быть сложным, так как он выберет пустые строки в нижней части диапазона.

Чтобы обойти это, вы можете: - Использовать getLastRow - используйте getDataRange, а затем фильтруйте ваши данные

«Перевод» getRange('D4:D') с использованием getLastRow, вам придется использовать что-то вроде getRange(4,4,sheet.getLastRow()-3,1) .

Однако, поскольку большинство ваших данных поступают из строки 3 или 4, вы можете вместо этого сделать что-то вроде:

var data = StockSheet.getDataRange();
var formattedData = data.getValues()
          .splice(3) //Removes the first 3 rows of data (the headers)
          .map(rowToData); //Returns an array of objects with all the columns as properties.
function rowToData(row) {
  return {
    "item": row[1],
    "stock": row[2],
    "hagerstown": row[3],
    "chambersburg": row[4],
    "waynesboro": row[5],
  };
}

Код на основе: этот диапазон .

Range in question

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