Метод возврата данных из разных диапазонов с использованием одной и той же функции - PullRequest
0 голосов
/ 27 апреля 2019

Я ищу способ использовать одну и ту же функцию из скрипта для возврата нескольких разных диапазонов данных для вывода на другой лист в Google Sheets.

Это моя первая попытка использования скриптов Google для любой автоматизациитак терпите меня.Этот проект разработан как система для размещения заказа на продукцию из инвентарного листа.Инвентарный лист содержит информацию о продукте и номера деталей, которые используются в процессе заказа.Я создал скрипт с триггером кнопки, который копирует данные с одного листа на лист заказа, который впоследствии можно распечатать.Это позволяет другому сотруднику иметь всю информацию, необходимую для размещения заказа.Проблема в том, что я могу скопировать только один продукт в лист заказа с каждым сценарием, есть ли другой способ сделать это?

Инвентаризация товара (скопировано из)

enter image description here

Форма заказа (скопирована в)

enter image description here

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

Это скрипт кнопки:


  //Copies Part Info
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sheet = SpreadsheetApp.setActiveSheet(ss.getSheets()[1])// Sets the active sheet to the complete inventory
  var range = sheet.getRange('A2:D2')// This is the one that I am able to copy
  var values = range.getValues()// Stores the product info
  return values;
  //Pastes Info to Order
  var activeSheet = SpreadsheetApp.setActiveSheet(ss.getSheets()[0])// Sets the order sheet as active
  var lastRow = activeSheet.getLastRow()//The next few lines find the next empty row on the sheet to paste the next data into
  var nextRow = parseInt(lastRow)+1
  var reqRange = activeSheet.getRange("A1:D100")
  var inputCell = reqRange.getCell(nextRow,1)
  var addData = inputCell.setValue(values)//Pastes the part info into the availabe cell

Есть ли способ использовать тот же скрипт нанесколько продуктов или нужно будет сделать копию для каждого?

1 Ответ

0 голосов
/ 27 апреля 2019

Использование диалогового окна для заказа деталей из инвентарного листа

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

Если бы это была работа, которую я выполнял для клиента, я бы фактически использовал шаблонный подход html, о котором вы можете прочитать в справке ниже.

function onOpen() {//Drop Down Menu You will need to run this from the editor to get it to create a menu.  Or close and then open the spreadsheet.  If you have other menus then make sure you put this in another project.
  SpreadsheetApp.getUi().createMenu('Order Parts')
  .addItem('Show Order Dialog', 'getInventory')
  .addToUi();
}

function getInventory() {//show order dialog for selecting parts
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Inventory');
  var rg=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn());
  var pA=rg.getValues();
  var html="<style>td,th{border:1px solid black;}</style><table>";
  html+=Utilities.formatString('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td></tr>','Brand','Product Description','Item','Quantity')
  for(var i=0;i<pA.length;i++) {
    html+=Utilities.formatString('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td><input type="button" value="Order" onClick="moveToOrder(%s);" /></td></tr>',pA[i][0],pA[i][2],pA[i][2],pA[i][3],i+2)
  }
  html+='</table><br /><input type="button" value="Close" onClick="google.script.host.close();" />';
  html+='<script>function moveToOrder(row){google.script.run.moveToOrder(row);};console.log("MyCode");</script>';
  var userInterface=HtmlService.createHtmlOutput(html).setWidth(600).setHeight(300).setTitle('Inventory');
  SpreadsheetApp.getUi().showModelessDialog(userInterface,'Inventory');
}

function moveToOrder(row) { //moves selected part to active page so make sure your on the right order form
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Inventory');
  var rg=sh.getRange(row,1,1,3);
  var pA=rg.getValues();
  var osh=ss.getActiveSheet();
  osh.appendRow(pA[0]);
}

Мой инвентарный лист:

enter image description here

Форма моего заказа:

enter image description here

Нажмите Показать диалог заказа в меню, и появится диалоговое окно

enter image description here

Нажмите кнопку рядом с деталью, которую вы хотите заказать, и деталь появится в заказе

enter image description here

Шаблонный HTML

Документация скрипта Google Apps

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