LANG SELRCT

コードを書く場所

2019年6月23日日曜日

複数のスプレッドシートのノートをひとつにまとめたい(シート1)


複数のスプレッドシートをひとつにまとめたい(シート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)
ノート(メモ)を取得する
ノートを入力する