行う内容
前回は同スプレッドシート内でのコピペを行いました。
下記のような内容です。
・ファイル名1:Gas_Sample
・ファイル名2:Gas_コピー先
Gas_Sampleファイルのシートから任意のシート上のセル内容を
Gas_コピー先ファイルの新規シートへ貼り付ける。
コピペを行う際に「setValues」を使用しますが、こちらを使用すると
下記のように書式はコピーされず値のみになってしまうようです。
↓ コピー元(Gas_Sampleファイル)
↓ コピー先(Gas_コピー先)
コード
コードは以下になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
function myFunction() { // openByIdを使用して追加したいスプレッドシート(Gas_コピー先)を読み込む let mySheet = SpreadsheetApp.openById("コピー先ファイルのID"); // スプレッドシートに新しいシートを追加挿入 let newSheet = mySheet.insertSheet(); // 新しく追加したシートを先頭に移動 mySheet.moveActiveSheet(1); // 追加挿入したシートに名前を設定 newSheet.setName("コピー先191"); // コピー元のシート(Gas_Sample)を指定する let copy_sheet = SpreadsheetApp.openById("コピー元ファイルのID"); copy_sheet = copy_sheet.getSheetByName('コピー元') /****************************************** * コピー元のシートから、コピー先のシートへコピペ * コピー元:2,2,5,3 = B2:D6 * B2から、5行3列がコピー対象である * コピー先:1,1 = A1 ******************************************/ // コピー元シートからcopyして、コピー先シートA1セルへ貼り付けを行う let test = copy_sheet.getRange(2,2,5,3).getValues(); newSheet.getRange(1,1,5,3).setValues(test); } |
解説
コピペ元とコピペ先でスプレッドシートが別となっていますので、
「SpreadsheetApp.openById」を使用して指定しています。
注意点としては以下です。
1 2 |
let test = copy_sheet.getRange(2,2,5,3).getValues(); newSheet.getRange(1,1,5,3).setValues(test); |
1行に纏めて↓のようにしたいのですが。
1 |
let test = copy_sheet.getRange(2,2,5,3).copyTo(newSheet.getRange(1, 1)); |
・Exception: Target range and source range must be on the same spreadsheet.
のエラーが発生します。
これはコピー元とコピー先が同一のスプレッドシートになっていない。
というエラーの様です。
そのため「copyTo」ではなく「setValues」にて貼り付けを行っています。
この方法以外にも、
シートをコピー > 別スプレッドシートへ貼り付け > コピーしたシートを削除
という方法でもコピペが可能ですね。
こちらなら書式毎コピーが可能です。
以上です。
最後までお読みいただきありがとうございました!