我需要开发Google脚本来生成产品列表的帮助

时间:2019-01-08 17:42:46

标签: javascript google-apps-script google-sheets

我对Google脚本非常满意,但是我正在尝试构建一个项目,该项目将:

  1. 在工作表A的列表(图像中的粉红色单元格)上获取2个输入(名称和项目编号),并将其复制/粘贴到工作表顶部的特定2个单元格范围(图像中的绿色单元格)。这些值在工作表的前4行(蓝色单元格)上生成输出,这是我的产品的模板。我确实为这些单元格创建了命名范围。我认为... 图片-> Picture of My "SheetA"
  2. 在工作表B的顶部插入4行。*这是Sheet B的图像

  3. 从工作表A的前4行复制这些新值,并将它们粘贴到工作表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 :(得分:0)

如果您通过https://jshint.com/(或类似的代码)运行代码,它将遇到很多问题。下面一些更正的代码。但是最明显的问题是for循环中的条件测试。

1)首先,使用单个=(赋值)运算符,而不是双==(测试) 2)循环中未设置应该为CELL_EMPTY测试的值。 3)无论如何这应该是一个while循环。

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();
        }
}