複数のスプレッドシートをひとつにまとめたい(シート1)
ではセルの値を対象にしました。
ここではセルのノートを対象にして、
指定した列に入力されているノートをひとつのシートにまとめてみます。
コード.gs
var folderId = 'FOLDER_ID';// 複数のシートが入っているフォルダID var spreadsheets = getFiles(folderId); var masterSheetUrl = 'SPREADSHEET_URL';// まとめるスプレッドシートのID var noteCol = 'E';// ノートが入っている列 /************************************ これを実行する ************************************/ function runGetAndSetValues() { var ssIds = getSsIds(spreadsheets); for(var i = 0; i < ssIds.length; i++) { var sheetNotes = getSheetNotes(ssIds[i]); Logger.log(sheetNotes.length) var sheet = SpreadsheetApp.openByUrl(masterSheetUrl).getSheets()[0]; setSheetNotes(sheet, sheetNotes); } } /************************************ ノートを取得する ************************************/ function getSheetNotes(ssId) { var ss = SpreadsheetApp.openById(ssId); var sheet = ss.getSheets()[0]; var startRow = 2; var lastRow = sheet.getLastRow(); var notes = sheet.getRange(noteCol + startRow + ':' + noteCol + lastRow).getNotes(); return notes; } /************************************ 対象のスプレッドシートのIDを取得して返す ************************************/ function getSsIds(spreadsheets) { var ssIds = []; for(var i = 0; i < spreadsheets.length; i++) { ssIds.push(spreadsheets[i]['id']); } return ssIds; } /************************************ シートにノートを一気に入力する ************************************/ function setSheetNotes(sheet, array){ Logger.log(array.length) var lastRow = getLastNoteRow(sheet, noteCol); var startRow = lastRow + 1; var numRows = lastRow + array.length; Logger.log(numRows) var range = sheet.getRange(noteCol + startRow + ':' + noteCol + numRows); range.setNotes(array); } /************************************ 入力されているノートの最終行を取得して返す ************************************/ function getLastNoteRow(sheet, col) { var lastCols = sheet.getLastColumn(); var notes = sheet.getRange(col + ":" + col).getNotes(); for (var i = notes.length - 1; i >= 0; i--) { if (notes[i] != "") { break; } } var lastNoteRow = i + 1; return lastNoteRow; } /************************************ フォルダ内のファイルを取得して 昇順にして返す ************************************/ function getFiles(folderId) { var fileProps = []; var folder = DriveApp.getFolderById(folderId); var contents = folder.getFiles(); while(contents.hasNext()) { var file = contents.next(); var name = file.getName(); var id = file.getId(); var obj = {}; obj["name"] = name; obj["id"] = id; fileProps.push(obj); } var sorted = objSort(fileProps); return fileProps; } /************************************ 並べ替える ************************************/ function objSort(fileProps) { var ascending = fileProps.sort(asc); return ascending; } /************************************ nameで昇順に並べ替える ************************************/ function asc(a, b){ var A = a.name; var B = b.name; if(A > B){ return 1; }else if(A < B ){ return -1; }else{ return 0; } } |
関連記事
複数のスプレッドシートをひとつにまとめたい(シート1)
ノート(メモ)を取得する
ノートを入力する