概要
沢山のエクセルを編集する作業があり、GASでやったので使えそうなところのメモ書きです。
内容
- 特定のフォルダにスプレッドシートを入れる(複数可)
- GASの時間トリガーで実行
- すべてのファイルとシートのhogeがfugaに置き換わる
function hogeTofuga() {
const folderId = 'フォルダID'
const folder = DriveApp.getFolderById(folderId);
//getFilesByType()。フォルダ内のスプレッドシートしかとってこない。便利。詳しくは参考資料[1]
const files = iteratorToArr(folder.getFilesByType(MimeType.GOOGLE_SHEETS));
files.map(function(file) {
const ss = SpreadsheetApp.open(file);
const sheets = ss.getSheets(); //全部のシートについて行う
sheets.map(function(sheet) {
const data = sheet.getDataRange().getValues(); //シートの内容を全部もらう
//以下、処理内容
const changes = data.map(function(row){
return row.map(function(x) {
return (x == 'hoge') ? 'fuga' : x;
});
});
//変更したシートデータで上書き
sheet.getRange(1, 1, changes.length, changes[0].length).setValues(changes);
});
});
}
function iteratorToArr(files) {
var arr = [];
while(files.hasNext()) {
arr.push(files.next());
}
return arr;
}
メモ
- ファイルは処理した後、別のフォルダに移動させた方がいい
- エクセルを自動でスプレッドシートにできるらしい[3](エクセル→スプレッドシート→編集→エクセルが自動でできるらしい)
- スプレッドシートにgetValues, setValuesするタイミングだがセル毎かシート毎かスプレッドシート毎にするのかどれが高速なのかわからない。今回は開きなおすのが面倒なのとセル毎では一般的によくないのでシート毎に書き込んだ。もしかしたらセル毎でも問題ないかもしれない
- フォーマットがある程度決まっているならいろいろな処理ができる
- constがGASでも使えた
- アロー演算子は使えない、使いたい
参考資料
[1] Enum MimeType | Apps Script | Google Developers
[2] Class DriveApp | Apps Script | Google Developers
[3] GASでExcelファイルをSpreadsheetに変換する (再)