0

我一直在浏览不同的论坛和 stackoverflow,以在我的脚本中找到问题的解决方案。让我解释:

我有 2 个不同的电子表格,每个电子表格都包含一张工作表。我想将“Spreadsheet1 - Sheet 1”中的数据合并到“Spreadsheet2 - Data”。我的逻辑是将电子表格 1 中的数据复制到电子表格 2(这非常有效)。但是,我还希望我的脚本删除在 Spreadsheet1 中找到的数据,这就是我被阻止的地方。我正在尝试使用“deleteRows()”方法,但这似乎无法正常工作。

这是我的脚本:

function Consolidate() {
   var source = SpreadsheetApp.openById('Spreadsheet1_unique_id');
   var sourcesheet = source.getSheetByName('Sheet1');

   var target = SpreadsheetApp.openById('Spreadsheet2_unique_id')
   var targetsheet = target.getSheetByName('Data');
   var targetrange = targetsheet.getRange(targetsheet.getLastRow(), 1, sourcesheet.getLastRow(), sourcesheet.getLastColumn());
   var rangeValues = sourcesheet.getRange(2, 1, sourcesheet.getLastRow(), sourcesheet.getLastColumn()).getValues();
   targetrange.setValues(rangeValues);
   sourcesheet.deleteRows(2, sourcesheet.getLastRow());
}

我的 Google Apps 脚本的调试功能指示“那些行超出范围”。在这种情况下,这意味着什么?

通过搜索,我了解到我在deleteRows()中定义的第二个参数并不代表一系列行,而只是一行。知道我试图找到一种方法来得到正确的东西。然而,每次尝试都是由一个非工作脚本结束的。我是正确的还是我弄错了?

有人对如何达到预期结果有想法吗?

非常感谢你的帮助!

4

1 回答 1

0

我在测试电子表格中运行了一些测试,只需添加一个 -1(因为您开始第 2 行)它应该可以解决您的问题。

function Consolidate() {
var source = SpreadsheetApp.openById('Spreadsheet1_unique_id');
var sourcesheet = source.getSheetByName('Sheet1');

var target = SpreadsheetApp.openById('Spreadsheet2_unique_id')
var targetsheet = target.getSheetByName('Data');
var targetrange = targetsheet.getRange(targetsheet.getLastRow(), 1, sourcesheet.getLastRow(), sourcesheet.getLastColumn());
var rangeValues = sourcesheet.getRange(2, 1, sourcesheet.getLastRow(), sourcesheet.getLastColumn()).getValues();
targetrange.setValues(rangeValues);
sourcesheet.deleteRows(2, sourcesheet.getLastRow()-1);
}

希望这可以帮助。如果有任何问题我会在评论中回答。

于 2015-08-11T20:35:58.210 回答