This report has been written by Alexander Ivanov and me.
The first sample script is for retrieving spreadsheet ID from a range using Google Apps Script. I sometimes want to retrieve spreadsheet ID from ranges. In such case, I always use this.
- Range
- -> Retrieve Sheet using
getSheet() - -> Retrieve Spreadsheet using
getParent() - -> Retrieve spreadsheet ID
var id = "123456789abcdefg";
var sheet = "Sheet";
var cells = "a1:b10";
var range = SpreadsheetApp.openById(id).getSheetByName(sheet).getRange(cells);
var id = range.getSheet().getParent().getId();
>>> id ---> 123456789abcdefgWe considered about applying this to practical scenes.
The active Spreadsheet can be used for retrieving from e.range at onEdit(e).
function onEdit(e) {
Logger.log(e.range.getSheet().getParent())
}It can be used as the enhanced copyTo().
// Source
var range = "a1:b5";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var srcrange = ss.getActiveSheet().getRange(range);
// Destination
var range = "c1:d5";
var dstid = "### file id ###";
var dst = "### sheet name ###";
var dstrange = SpreadsheetApp.openById(dstid).getSheetByName(dst).getRange(range);For above script, srcrange.copyTo(dstrange); returns error. Because copyTo() cannot be used for copying data to other spreadsheet.
So we propose a following simple method. This method can copy data from Spreadsheet A to Spreadsheet B using the range.
function copyToo(srcrange, dstrange) {
var dstSS = dstrange.getSheet().getParent();
var copiedsheet = srcrange.getSheet().copyTo(dstSS);
copiedsheet.getRange(srcrange.getA1Notation()).copyTo(dstrange);
dstSS.deleteSheet(copiedsheet);
}