Reputation: 21
i'm having trouble in copying values from one sheet to another sheet using Google script. When I call the function, it says
Exception: The parameters (String,String,String,String) don't match the method signature for SpreadsheetApp.Spreadsheet.getRange.**
So it doesn't execute.
function BalanceLifeTodayUpdate() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
spreadsheet.getRange('\'All Links\'!IC702','\'All Links\'!IC703','\'All Links\'!IC707','\'All Links\'!IC708').copyTo(spreadsheet.getRange('\'Balance Life Today\'!C404','\'Balance Life Today\'!C405','\'Balance Life Today\'!C409','\'Balance Life Today\'!C410'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
};
Upvotes: 0
Views: 96
Reputation: 201573
getRange
of Class Spreadsheet is getRange(a1Notation)
. In your script, 2nd argument is not required to be used. I think that this is the reason of your issue. In your script, how about merging the cells of '\'All Links\'!IC702','\'All Links\'!IC703'
and also '\'Balance Life Today\'!C404','\'Balance Life Today\'!C405'
? The modified script is as follows.
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
spreadsheet.getRange('\'All Links\'!IC702:IC703').copyTo(spreadsheet.getRange('\'Balance Life Today\'!C404:C405'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
or
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
spreadsheet.getRange('\'All Links\'!IC702:IC703').copyTo(spreadsheet.getRange('\'Balance Life Today\'!C404'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
From your following reply,
but I have more cells to be copied. For example: 'var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); spreadsheet.getRange(''All Links'!IC702',''All Links'!IC703',''All Links'!IC707',''All Links'!IC708').copyTo(spreadsheet.getRange(''Balance Life Today'!C404',''Balance Life Today'!C405',''Balance Life Today'!C409',''Balance Life Today'!C410'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); };'
When there are only 2 pairs of source and destination ranges, I thought that the loop can be used. So, how about the following modification? If your ranges are more existing, in order to reduce the process cost, Sheets API might be suitable.
function BalanceLifeTodayUpdate() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// This is from your updated script.
var ranges = [
{ src: '\'All Links\'!IC702:IC703', dst: '\'Balance Life Today\'!C404' },
{ src: '\'All Links\'!IC707:IC708', dst: '\'Balance Life Today\'!C409' }
];
ranges.forEach(({ src, dst }) => {
spreadsheet.getRange(src).copyTo(spreadsheet.getRange(dst), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
});
}
Upvotes: 1