google-apps-script - 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”)。
非常感谢任何和所有帮助。
解决方案
您必须获取值而不仅仅是行:
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);
}
在您的版本中,您试图将整数复制到整数而不是将数组复制到范围。
推荐阅读
- javascript - 如何在js文件中使用mapState?
- php - 如何在没有 .php 扩展名的情况下通过 php 脚本进行路由?
- android - Android 构建失败。添加firebase性能sdk后
- tensorflow - 如何配置 Tensorflow 以使用特定的 GPU?
- mocha.js - 如何在浏览器中运行很少的测试套件,在 Nodejs 环境 Mocha 中运行很少的测试套件?
- javascript - 将名称的键/值数组动态添加到对象数组中
- c++ - 如何在c ++中获取特定间隔内的随机数
- ruby-on-rails - application.rb 中 Kernel.spawn 和 rails 的奇怪行为
- apache-flink - 不平衡的 Flink 流式负载
- google-cloud-platform - 将 1000 万条记录的 Google Bigquery 记录发布到 pubsub 主题的最佳选择是什么