首页 > 解决方案 > Google 脚本编辑器:getLastRow 值并将(仅值)粘贴到倒数第二行

问题描述

我已经尝试了以下脚本的 10 多种变体来尝试实现我认为的简单功能,即复制 Google 表格最后一行中的值并将它们粘贴到倒数第二行。包含数据的最后一行和倒数第二行总是在变化,所以我不能为任何一个指定静态范围。这是我写的两个最接近的版本:

function Export() {
var ss = SpreadsheetApp.getActiveSpreadsheet()
var database = SpreadsheetApp.openById("xxx");
var source = ss.getSheetByName('aaa');
var last_row = source.getLastRow();
var second_last_row = (last_row-1);
var copyData = source.getRange(second_last_row).setValues(last_row);
}

这里的错误是“var CopyData”行的“未找到范围”。如果我将这一行重写如下: var copyData = source.getRange.second_last_row.setValues(last_row); 我收到一条错误消息,提示“无法读取未定义的属性 'setValues'”。

我也试过这个版本:

function copyv() {
 var target = SpreadsheetApp.openById("xxx");
 var target_sheet = target.getSheetByName("aaa");
 var last_row = target_sheet.getLastRow();
 let source = last_row
 let destination = last_row-1
      source.copyTo(destination, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
} 

在这个示例中,我得到“source.copyTo 不是函数”的错误,尽管这适用于我编写的范围是静态的其他函数(例如:A5:BC,而不是“last_row”)。

非常感谢任何和所有帮助。

标签: google-apps-scriptgoogle-sheets

解决方案


您必须获取值而不仅仅是行:

function Export() {
var ss = SpreadsheetApp.getActiveSpreadsheet()
var database = SpreadsheetApp.openById("xxx");
var source = ss.getSheetByName('aaa');

var last_row = source.getLastRow();
var last_column = source.getLastColumn();
var data = source.getRange(last_row,1,1,last_column).getValues();//gets actual data
var destination_range = source.getRange(last_row-1,1,1,last_column);//creates target range
source.getRange(data).setValues(destination_range);
}

在您的版本中,您试图将整数复制到整数而不是将数组复制到范围。


推荐阅读