[Google Apps Script] ワークシートからデータを取得し、別のワークシートに出力する
時間指定で定期実行するトリガー機能を利用するには、ワークシートに対してデータを入出力する必要があります。
ワークシートの操作を学びます。
Contents
仕様
例としてこんな仕様を満たせるように組み立ててみます。
1 行目はタイトル行とします。
- 入力(Words)ワークシートから「名前、数量、単価」を取得。
- 出力(Logs)ワークシートに「名前、数量、単価、合計(数量×単価)」を出力。
参考にするドキュメントはこちらです。
概ねこのような機能が求められそうです。
- 指定した名前のワークシートを取得する。
- 入力シート内のデータを取得する。
- (計算する)
- 出力シート内に追記する。
シートからデータを取得する
「指定した名前のワークシートを取得する」には getSheetByName()
を利用します。
「入力シート内のデータを取得する」には getSheetValues()
を利用します。
引数に行数とカラム数が必要になりますので getLastRow()
も利用します。
function main() {
var spreadsheetId = "YOUR_SPREADSHEET_ID";
var spreadsheet = SpreadsheetApp.openById(spreadsheetId);
var sheetInput = spreadsheet.getSheetByName("Words");
var sheetOutput = spreadsheet.getSheetByName("Logs");
// タイトル行数分の 1 を引く。
var dataRows = sheetInput.getLastRow() - 1;
// タイトル行の次 2 行目からスタート。
var values = sheetInput.getSheetValues(2, 1, dataRows, 3);
Logger.log(values);
}
結果として [[Apple, 3.0, 200.0], [Banana, 1.0, 300.0], [Orange, 2.0, 150.0]]
という配列が得られました。
(計算する)
特筆することはないので省略します。
function main() {
(略)
var result = calc(values);
Logger.log(result);
}
function calc(values) {
var result = [];
values.forEach(function (_a) {
var name = _a[0], quantity = _a[1], price = _a[2];
var amount = quantity * price;
result.push([name, quantity, price, amount]);
});
return result;
}
[[Apple, 3.0, 200.0, 600.0], [Banana, 1.0, 300.0, 300.0], [Orange, 2.0, 150.0, 300.0]]
という結果が帰ってきます。
シートに結果を追記する
appendRow()
に引数として配列を渡すと行データとして追記します。
当該ワークシートの最終行も自動認識してくれるので便利です。
ですので、こんな表現だけで実現できました。
result.forEach(function (rowContents) {
sheetOutput.appendRow(rowContents);
});
サンプルコード
最終的にはこのようになりました。
function main() {
var spreadsheetId = "YOUR_SPREADSHEET_ID";
var spreadsheet = SpreadsheetApp.openById(spreadsheetId);
var sheetInput = spreadsheet.getSheetByName("Words");
var sheetOutput = spreadsheet.getSheetByName("Logs");
var dataRows = sheetInput.getLastRow() - 1;
var values = sheetInput.getSheetValues(2, 1, dataRows, 3);
var result = calc(values);
result.forEach(function (rowContents) {
sheetOutput.appendRow(rowContents);
});
}
function calc(values) {
var result = [];
values.forEach(function (_a) {
var name = _a[0], quantity = _a[1], price = _a[2];
var amount = quantity * price;
result.push([name, quantity, price, amount]);
});
return result;
}
いろいろとできることが広がりそうですね。