从1张纸复制值并将值设置为另一张纸的最后一行

时间:2016-08-24 13:43:17

标签: google-apps-script google-sheets

我知道之前已经完成了这项工作,但我努力让自己的工作得以实现,我想要从工作表中复制所有数据'模板'到历史'片。

我想在历史记录表底部的新行中发送值。

这是我的工作代码,我只需要更改值的设置位置。

var sheetTemplate = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Template');
var sheetHistory = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('History');

var getRange = sheetTemplate.getDataRange();
var DataCopied = SRange.getValues();

sheetHistory.getRange("a2:F7").setValues(DataCopied);

1 个答案:

答案 0 :(得分:1)

您正在使用getDataRange()getValues()方法,这将返回二维数组中存在数据的相应值,因此当您将值复制到新工作表时setValues()您需要考虑所检索数据的维度,以便它们匹配,您需要:

  1. 使用getLastRow()
  2. 获取历史记录表的最后一行
  3. 使用DataCopied
  4. 获取DataCopied.length数组(行数)的“高度”
  5. 获取DataCopied数组(列数)DataCopied[0].length的“宽度”。
  6. 使用getRange(row, column, numRows, numColumns)获取该尺寸的范围。
  7. 使用setValues()
  8. 设置DataCopied的值

    您的代码应如下所示:

    function myFunction(){
      var sheetTemplate = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Template');
      var sheetHistory = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('History');
    
      var getRange = sheetTemplate.getDataRange();
      var DataCopied = getRange.getValues();
    
      // I defined the variables for better understanding      
      var startRow = sheetHistory.getLastRow()+1; // +1 because remember that while a range index starts at 1, 1, the JavaScript array will be indexed from [0][0].
      var startColumn = 1;
      var numRows = DataCopied.length;
      var numColumns = DataCopied[0].length;
      sheetHistory.getRange(startRow, startColumn, numRows, numColumns).setValues(DataCopied);
    
    }