実現したいこと
GASで下記の動きをさせたいです。
・特定のドライブに格納された複数のcsvデータを全て繋げてC列の日付順に昇順ソートをかけ、指定のスプレッドシートに転記したい。
前提
・格納するcsvは全て4行目までがタイトル行なので5行目以降(最終行はファイルにより異なる)のデータを転記したい。
・転記先のスプレッドシートは4行目までがタイトル行で、5行目からcsvデータを追加していきたい(上書きNG)
・処理が終わったcsvは処理済みのフォルダを格納するドライブフォルダに格納。
聞きたいこと
初心者なりにネットで調べながらスクリプトを作ってみました(なので下記コードの細かい意味を理解できていない部分もあります)
このスクリプトを動かすと、「Exception: データの列数が範囲の列数と一致しません。データは 10 列ですが、範囲は 7.列です。」というエラーが出ます。
エラーを直しつつ、実現したい動きをさせるにはどのように修正すればよろしいでしょうか?
該当のソースコード
GoogleAppsScript
1function EXCELtoSSAdd() { 2 3 const folder = DriveApp.getFolderById('xxxxxxxxxx');//Excelを格納したフォルダのID 4 const moveDir = DriveApp.getFolderById('xxxxxxxxxx');//使用済みフォルダ(上記フォルダ内) 5 const files = folder.getFiles(); 6 7 let allValues = []; 8 9 while (files.hasNext()) { 10 11 const file = files.next(); 12 const fileId = file.getId(); 13 14 const blob = DriveApp.getFileById(fileId).getBlob(); 15 const csv = blob.getDataAsString(); 16 const values = Utilities.parseCsv(csv); 17 values.shift(); 18 19 allValues = allValues.concat(values);//変数allValuesに各csvデータを追加 20 21 } 22 23 const sheet = SpreadsheetApp.openById('xxxxxxxxxx').getSheetByName('シート名'); 24 sheet.getRange(5, 1, allValues.length, allValues[0].length).setValues(allValues);//5行目A列からデータの最後尾行データの最後尾列にデータをセット 25 26 //シート内でソートしたいセル範囲をgetRangeで指定する 27 let data = sheet.getRange(5, 1, allValues.length, allValues[0].length); 28 //列Cを基準に降順でソートする 29 data.sort({column:3, ascending:true});//(ソートする列番号,降順か昇順か)true昇順、false降順 30 31 const moveFiles = folder.getFiles(); //フォルダ内のファイルを一括取得 32 33 for (let i = 0; moveFiles.hasNext(); i++) { 34 let moveFile = moveFiles.next(); 35 36 moveFile.moveTo(moveDir);//転記済みのファイルを処理済みフォルダに移動 37 38 } 39}

0 コメント