①コピーするスプレッドシートをフォルダに保存
②貼り付けたいスプレッドシートのIDを設定
③ ②のシート内の貼り付けたいシートのタブのIDを設定
④Sheet.getRangeでコピーしたいデータの範囲を指定
⑤SetValuesで貼り付け
基本的には、
コピーしたいファイルが保存されているフォルダのIDとタブの指定
コピーするファイルのIDとタブの指定
貼り付ける範囲の指定
で実行できます。
ただ、このままだと複数回実行した際に同じデータが上書きされずに
複数保存されてしますのでfor分とif分で条件を指定して保存したいデータだけ
貼り付けされるようにして下さい。
function test1() {
// コピー
var sheetMain = SpreadsheetApp.getActiveSheet();
var files = DriveApp.getFolderById('元データが格納されているフォルダのID').getFiles();
while (files.hasNext()) {
var file = files.next();
var sheet = SpreadsheetApp.open(file).getSheets()[2];
}
Logger.log("コピーが完了しました。");
// 貼り付け
var spreadsheet = SpreadsheetApp.openById('貼り付けたいシートのID'); // シートの指定
var sheet2 = spreadsheet.getSheetByName('tabの名前'); // タブの指定
aaa(sheet, sheet2);
}
function aaa(sheet, sheet2) {
// コピー
var dat = sheet.getDataRange().getValues();
var numRow = dat.length;
var copyRowCount = 0;
for (var i = 10; i < numRow; i++) {
if (dat[i][1] == "") {
break;
}
copyRowCount++;
}
if (copyRowCount == 0) {
return; // If there are no rows to copy, exit the function early
}
range = sheet.getRange(11, 1, copyRowCount, 32).getValues();
Logger.log("コピーした範囲は " + sheet.getName() + "!" + sheet.getRange(11, 1, copyRowCount, 32).getA1Notation() + " です。");
// 貼り付け
var dat2 = sheet2.getDataRange().getValues();
var currentDate = new Date();
var month = currentDate.getMonth() + 1;
var year = currentDate.getFullYear();
var dateStrings = [];
for (var i = 0; i < 4; i++) {
var newDate = new Date(year, month - 1, i + 1, 16, 0, 0, 0);
dateStrings.push(newDate.toLocaleDateString("en-US")); // スプレッドシート上の書式に合わせてロケールを指定
}
var numRow2 = dat2.length;
for (var n = 1; n < numRow2; n++) {
if (dateStrings.includes(sheet2.getRange(n, 38).getDisplayValue())) { // スプレッドシート上の表示値を取得して比較
break;
} else if (sheet2.getRange(n, 38).getDisplayValue() == "") { // スプレッドシート上の表示値を取得して比較
break;
}
}
range2 = sheet2.getRange(2, 38, copyRowCount, 32).setValues(range); // 範囲
Logger.log("貼り付け範囲");
Logger.log(range2.getValues());
}