RangeクラスのcopyToメソッドを使うと、書式を含めてコピーすることができます。
Range copyTo
ですが、これは同じスプレッドシート内でのみ使うことができるもので、質問者様のケースでは別のスプレッドシートから値も書式も転記したい、と言うことなのでそのままでは使えません。
代替策として、コピー元のシートをコピー先のスプレッドシートに一時的にコピーして同じスプレッドシート内に含めてしまい、それからRange.copyTo
すれば良いかと思います。値と書式を取り込んだ後に一時コピーのシートは削除してしまえばいいでしょう。
確認の為にサンプルを作ってみました。スプレッドキーで示される別のスプレッドシートからアクティブな現在のスプレッドシートへ書式と値を転記(コピー)します。
JavaScript
1function sample01() {
2
3 // コピー先のスプレッドシート
4 var dstSpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
5
6 // コピー元のスプレッドシートを開く
7 var srcSpreadSheet = SpreadsheetApp.openById('スプレッドキー');
8
9 // コピー元のシート「SRCDATA」を選択
10 var srcSheet = srcSpreadSheet.getSheetByName('SRCDATA');
11
12 // コピー元のシートをコピー先のスプレッドシートへコピー
13 var copiedSheet = srcSheet.copyTo(dstSpreadSheet);
14
15 // コピーしたシートのA1:B2の範囲を選択
16 var srcRange = copiedSheet.getRange('A1:B2');
17
18 // コピー先のスプレッドシートの「DSTDATA」シートを 転記先とする。
19 var dstSheet = dstSpreadSheet.getSheetByName('DSTDATA');
20
21 // 転記先の範囲をA3:B4とする
22 var dstRange = dstSheet.getRange('A3:B4');
23
24 // 書式と値を転記
25 srcRange.copyTo(dstRange);
26
27 // もう必要無いのでコピーしたシートは削除
28 dstSpreadSheet.deleteSheet(copiedSheet)
29}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。