使用 Google Apps 脚本合并 2 个 spreadsheet 之间的数据并删除源 sheet 中的数据
Consolidate data between 2 spreadsheets and delete data in source sheet with Google Apps Scripts
我一直在浏览不同的论坛和 Whosebug 以找到解决我脚本中问题的方法。让我解释一下:
我有 2 个不同的分布sheet,每个包含一个 sheet。我想将数据从 "Spreadsheet1 - Sheet 1" 合并到 "Spreadsheet2 - Data"。我的逻辑是将来自 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(因为你开始第 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);
}
希望这对您有所帮助。有问题我会在评论里回答。
我一直在浏览不同的论坛和 Whosebug 以找到解决我脚本中问题的方法。让我解释一下:
我有 2 个不同的分布sheet,每个包含一个 sheet。我想将数据从 "Spreadsheet1 - Sheet 1" 合并到 "Spreadsheet2 - Data"。我的逻辑是将来自 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(因为你开始第 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);
}
希望这对您有所帮助。有问题我会在评论里回答。