====== Google App Script ======
[[start|一つ上へ]]
===== スプレッドシート =====
==== スプレッドシートのIdを指定して開く ====
var spreadsheet = SpreadsheetApp.openById();
var sheet = spreadsheet.getSheetByName("");
指定したシートのデータを取得する。
流れは
- スプレッドシートのIDを指定して開く
- シート名を指定して開く
- データ領域の大きさを取得
- 領域のデータを取得
という流れになる。コードは以下の通り。
var spreadsheet = SpreadsheetApp.openById();
var sheet = spreadsheet.getSheetByName("");
var range = sheet.getDataRange(); // これで、データがある領域のrectangle を取得できる。
var values = range.getValues();
==== 配列 ====
=== 配列の中に特定の値が含まれているかどうかの判定 ===
配列に対してincludes("value") を指定すると、値が含まれている場合はtrue、含まれない場合はfalse を返す。
column_nameが含まれる場合にヘッダーを追加する場合は以下のようになる
if(headerRows.includes("column_name")) {
headerRows.push("header1","header2",...);
}
==== ループ処理 ====
=== for of 文 ===
配列の中身をすべて処理したい場合は '' for of '' を使用する。
for(変数 of 配列){
//配列の要素数だけ繰り返し、毎回変数に配列値を格納
//for ofループで実行する処理を記述
}
==== シートの範囲を指定する ====
getRange(row, column, numRows, numColumns)
^項目^説明^
|row|範囲の開始行のインデックスを指定。|
|column|範囲の開始列のインデックスを指定。|
|numRows|範囲に含まれる行の数を指定。|
|numColumns|範囲に含まれる列の数を指定。|
=== ヘッダー行のみを取得する ===
const headerRow = sheet.getRange(1,1,1,sheet.getLastColumn()).getValues()[0];
=== シートのA2からデータのある最後の行までのデータを取得する ===
var values = sheet.getRange(2,1,sheet.getLastRow()-1,1).getValues(); // A2から最後の行までのデータを読み込む。
==== 文字列と数値の変換 ====
文字列から数値に変換するには
var string = '123456';
var num = Number(string);
var inum = parseInt(string);
を使用する。逆に、数値から文字列に変換するには
var num = 123456;
var str = num.toString();
のように記載する。
==== 文字列操作 ====
=== 置換 ===
文字列を置換するには、''replace()''メソッドを使用する。
これは、第1引数の文字を第2引数の文字に置換する。
例えば、123,456 からカンマを取り除く場合は
var str = '123,456';
var str2 = str.replace(",","")
正規表現を使うことも可能。RegExpオブジェクトを用いる。gオプションを付けると複数回の置換も一度で行うことができる。
let replaceWord = /aaa/g;
doc = doc.replace(replaceWord, "bbb");
=== 日付を文字列に変換 ===
//実行した日付のオブジェクトをtoday変数に格納する
let today = new Date();
//Dateオブジェクトのtoday変数をログ出力する
Logger.log(today);
//formatDateメソッドで日付の表示形式を変換する
today = Utilities.formatDate(today, "JST", "yyyy/MM/dd");
//formatDateメソッドで変換後をログ出力する
Logger.log(today);
=== 文字列の連結 ===
文字列を連結するには、''+'' 演算子か''concat()''メソッドを使用する。
let str1 = "String1";
let str2 = "String2";
let str3 = str1 + str2;
あるいは
let str1 = "String1";
let str2 = "String2";
let str3 = str1.concat(str2);
==== CSVコンテンツの作成 ====
まず、mutablelist の最初の要素を取得する。この要素はキーと値を持つオブジェクトになっているので、
''Object.keys(mutableList[0])'' によってそのキーを配列として取得することが出来る。
これに対して''.joni(",")''を作用させることで、各キーをカンマ区切りの文字列とすることが出来る。
const headerRow = Object.keys(mutableList[0]).join(",");
次に
const dataRows = mutableList.map(rowData => {
return Object.values(rowData).map(value => {
if (typeof value === "string" && value.includes(",")) {
return '"' + value.replace(/"/g, '""') + '"';
}
return value;
}).join(",");
});
の各処理の内容について。
''mutableList.map(rowData => {...})'' は
* mutableList 内の各オブジェクトに対してループ処理を行う。
* rowData はループ内で扱う各オブジェクト。
''Object.values(rowData).map(value => {...})'' については、
rowData でオブジェクト内の各値(プロパティの値)に対してループ処理を行う。
Object.values(rowData) は rowData 内の値を配列として取得する。
value はループ内で扱う各値を示す。
''if (typeof value === "string" && value.includes(",")) {...}'' については、
value が文字列であり、かつカンマ , を含む場合にCSV内で特殊文字として扱われる可能性のあるカンマをエスケープする。
例えば、文字列内にカンマがある場合、ダブルクォーテーションで囲むことでエスケープする。
また、既にダブルクォーテーションが含まれている場合は、二重のダブルクォーテーションに変換する。
===== プログラム例 =====
* [[gas:example:checkdigit|チェックデジットの計算]]
* [[gas:example:mutablelist|mutable(可変長)リストを使用してヘッダー名で参照する]]
* [[gas:example:http_client|HTTPクライアントでのWebアクセス]]
* [[gas:example:textcopy|処理したテキストをwebページに表示し、ボタンでクリップボードにコピーする]]
* [[gas:example:mutable_to_csv|mutableリストからCSVに変換する]]
function exportToCSV() {
var spreadsheetId = ""; // スプレッドシートのIDを指定
var spreadsheet = SpreadsheetApp.openById(spreadsheetId); // スプレッドシートIDを指定して開く。
var sheet = spreadsheet.getSheetByName("tb01"); // シートの名前を指定
var range = sheet.getDataRange(); 指定したシートのデータ領域を取得
var values = range.getValues(); その領域のデータを取得
// values 各行列のデータをもとにCSVを作成
var csvContent = "";
for (var row = 0; row < values.length; row++) {
var rowData = values[row];
for (var col = 0; col < rowData.length; col++) {
var cellValue = rowData[col];
if (cellValue !== null && cellValue !== undefined) {
// セルの値が文字列になるようにエスケープ処理
cellValue = '"' + cellValue.toString().replace(/"/g, '""') + '"';
} else {
cellValue = "";
}
csvContent += cellValue;
if (col < rowData.length - 1) {
csvContent += ",";
}
}
csvContent += "\n";
}
// CSVファイルをエクスポートする
var fileName = "export.csv";
var mimeType = "text/csv";
var blob = Utilities.newBlob(csvContent, mimeType, fileName); // blob を作成
DriveApp.createFile(); // blobを指定してファイルをエクスポートする
}