複数のスプレッドシートをひとつにまとめたい(シート1)
複数のスプレッドシートのノートをひとつにまとめたい(シート1)
上記2つで書いたコードをマージして値とノートを一箇所に集めるコード
コード.gs
var folderId = 'FOLDER_ID';// 複数のシートが入っているフォルダID var spreadsheets = getFiles(folderId); var masterSheetUrl = 'SPREADSHEET_URL';// まとめるスプレッドシートのID var noteCol = 'E';// E列 /************************************ これを実行する ************************************/ function runGetAndSetValues() { var ssIds = getSsIds(spreadsheets); for(var i = 0; i < ssIds.length; i++) { var sheetValues = getSheetValues(ssIds[i]); var sheetNotes = getSheetNotes(ssIds[i]); var sheet = SpreadsheetApp.openByUrl(masterSheetUrl).getSheets()[0]; setSheetValues(sheet, sheetValues); setSheetNotes(sheet, sheetNotes); } } /************************************ 対象のスプレッドシートのIDを取得して返す ************************************/ function getSsIds(spreadsheets) { var ssIds = []; for(var i = 0; i < spreadsheets.length; i++) { ssIds.push(spreadsheets[i]['id']); } return ssIds; } /************************************ シートの値を取得して返す ************************************/ function getSheetValues(ssId) { var ss = SpreadsheetApp.openById(ssId); var sheet = ss.getSheets()[0]; var lastRow = sheet.getLastRow(); var lastCol = sheet.getLastColumn(); var range = sheet.getRange(2, 1, lastRow, lastCol);// 一行目はヘッダなので2行目から取得する var values = range.getValues(); return values; } /************************************ シートに値を一気に入力する ************************************/ function setSheetValues(sheet, array){ var lastRow = sheet.getLastRow(); var startRow = lastRow + 1; var startCol = 1; var numRows = array.length; var numCols = array[0].length; var range = sheet.getRange(startRow, startCol, numRows, numCols); range.setValues(array); } /************************************ ノートを取得する ************************************/ 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; } /************************************ シートにノートを一気に入力する ************************************/ function setSheetNotes(sheet, array){ var lastRow = getLastNoteRow(sheet, noteCol); var startRow = lastRow + 1; var numRows = lastRow + array.length; 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)
複数のスプレッドシートのノートをひとつにまとめたい(シート1)