使用Google Apps脚本

时间:2015-08-11 20:12:29

标签: google-apps-script delete-row consolidation

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

我有两个不同的电子表格,每个电子表格包含一张表格。我想整合来自" Spreadsheet1 - Sheet 1"到"电子表格2 - 数据"。我的逻辑是来自Spreadsheet1的数据被复制到Spreadsheet2(这非常有效)。 但是,我还希望我的脚本删除在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()中定义的第二个参数并不代表一行行而只是一行。知道我试图找到一种方法来获得正确的东西。但是,每次尝试都是由非工作脚本结束的。 我没弄错,或者我错了吗?

有人对如何达到预期结果有所了解吗?

非常感谢你的帮助!

1 个答案:

答案 0 :(得分: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);
}

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