如何使用Google表格中的应用脚本自动复制/粘贴数据

时间:2018-07-05 20:58:26

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

我正在尝试使用App脚本编写一些代码,这些脚本(通过每日触发)将数据从F13:G13单元格复制/粘贴到I列中的第一个空单元格。这是我的代码:

    function TrackCurrentValues() 

      var spreadsheet = SpreadsheetApp.getActive();
      var sheet = spreadsheet.getSheets()[0];

      var lastRow = getLastRowInColumn(sheet, 'I:I');
      // Logger.log('I' + parseInt(lastRow + 1));

      var pasteRange = sheet.getRange('I' + parseInt(lastRow + 1) );
      pasteRange.activate();

      // now that we have the first empty cell in column I, paste the values we found from cells F13:G13
      spreadsheet.getRange('F13:G13').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);

    };

function getLastRowInColumn(sheetObj, range) {
   return sheetObj.getRange(range)
            .getValues().filter (String).length + 1
}

运行时,发生的是从正确的位置复制了数据,但始终将其粘贴到单元格A1中。而且,粘贴的数字前面带有英镑字符(£)。

可能是什么问题?如果我手动运行它,它通常会起作用。最主要的是,它在I:I中找不到空单元格。

1 个答案:

答案 0 :(得分:1)

此代码应满足您的需求:

function TrackCurrentValues(){
      var sheet = SpreadsheetApp.getActive().getSheets()[0];
      var lastRow = getLastRowInColumn(sheet, 'I:I');
      var pasteRange = sheet.getRange(lastRow + 1,9,1,2);   
      var copyRange = sheet.getRange(13,6,1,2)
      pasteRange.setValues(copyRange.getValues())
    };

function getLastRowInColumn(sheetObj, range) {
   return sheetObj.getRange(range).getValues().filter(String).length
}

关于您的问题,该范围很可能被格式化为显示该货币符号。要对此进行更新,请选择范围,转到工具栏,然后选择格式>数字>指定您想要的格式

其他想法: i)您要向lastRow变量添加两次(一次在getLastRowInCOlumn函数中,一次在pasteRange定义中) ii)我建议不要使用“有效范围”来存储位置,而是将该范围存储在变量中 iii)看来您的复制范围是2列宽,但是pasteRange只是1列宽