Мне нужна помощь в разработке скрипта Google для создания списка продуктов - PullRequest
0 голосов
/ 08 января 2019

Я очень зеленый в скрипте Google, но я пытаюсь создать проект, который будет:

  1. взять 2 ввода (имя и номер элемента) в списке на листе A (розовые ячейки на изображении) и скопировать / вставить их в определенный диапазон из 2 ячеек (зеленые ячейки на изображении) в верхней части листа. Эти значения генерируют выходные данные в первых 4 строках листа (синие ячейки), который является шаблоном для моих продуктов. Я создал именованные диапазоны для этих клеток. Я думаю... Изображение -> Изображение моей "SheetA"
  2. Вставьте 4 строки в верхней части листа B. * Это изображение Лист B

  3. Скопируйте эти новые значения из первых 4 строк на листе A и вставьте их во вновь вставленные строки на листе B.

  4. Повторите

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

Вот мой код:

function onOpen() {
  var spreadsheet = SpreadsheetApp.getActive();
  var menuItems = [
    {name: 'Prepare sheet...', functionName: 'prepareSheet_'},
    {name: 'Generate products...', functionName: 'generateProduct_'}
  ];
  spreadsheet.addMenu('Directions', menuItems);
}

function generateProduct_() {
    var i = 0
    var generatorCells = nameCell + ":" + numberCell;
    var nameCell = new String("A"+i);
    var numberCell = new String("B"+i);
    var generatorCells = nameCell + ":" + numberCell;
    var nameCellResults = new String("A"+(i*5));
    var numberCellResults = new String("B"+(i*5));
    for (var i=11;CELL_EMPTY = false; i++) {
  spreadsheet.getRange(generatorCells).copyTo(getRange(productGenCells)), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false;
  spreadsheet.getRange('2:5').copyTo(sheet.getRange(genResults),{contentsOnly:true}, spreadsheetApp.CopyPasteType.PASTE_VALUES, true);
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Results'), true);
   spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 4);
  spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
  spreadsheet.getRange('productGen!2:5').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('productGen'), true);
  spreadsheet.getRange('2:2').activate();
  }
};

1 Ответ

0 голосов
/ 09 января 2019

Если вы запустите свой код через https://jshint.com/ (или аналогичный), то возникнут многочисленные проблемы. Некоторый исправленный код ниже. Но самая вопиющая проблема - это условный тест в цикле for.

1) Сначала используется одиночный = (присваивание) оператор вместо двойного == (тест) 2) Значение, которое предположительно проверено для CELL_EMPTY, не установлено в цикле. 3) в любом случае это, вероятно, цикл по времени.

function onOpen() {
  var spreadsheet = SpreadsheetApp.getActive();
  var menuItems = [
    {name: 'Prepare sheet...', functionName: 'prepareSheet_'},
    {name: 'Generate products...', functionName: 'generateProduct_'}
  ];
  spreadsheet.addMenu('Directions', menuItems);
}

function generateProduct() {
    var i = 0;
    var nameCell = "A"+i;
    var numberCell = "B"+i;
    var generatorCells = nameCell + ":" + numberCell;
    var nameCellResults = "A"+(i*5);
    var numberCellResults = "B"+(i*5);
    for (i=11;CELL_EMPTY == false; i++) {
        spreadsheet.getRange(generatorCells.copyTo(getRange(productGenCells)), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
          spreadsheet.getRange('2:5').copyTo(sheet.getRange(genResults),{contentsOnly:true}, spreadsheetApp.CopyPasteType.PASTE_VALUES, true);
          spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Results'), true);
          spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 4);
          spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
          spreadsheet.getRange('productGen!2:5').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
          spreadsheet.setActiveSheet(spreadsheet.getSheetByName('productGen'), true);
          spreadsheet.getRange('2:2').activate();
        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...